001 /**
002 * Copyright (C) 2011-2012 Barchart, Inc. <http://www.barchart.com/>
003 *
004 * All rights reserved. Licensed under the OSI BSD License.
005 *
006 * http://www.opensource.org/licenses/bsd-license.php
007 */
008 package com.barchart.util.concurrent;
009
010 import java.util.concurrent.BlockingQueue;
011 import java.util.concurrent.Callable;
012 import java.util.concurrent.ThreadPoolExecutor;
013 import java.util.concurrent.TimeUnit;
014
015 /**
016 * <p>
017 * Executes tasks in a thread pool. submit() method return a FutureCallback
018 * instance, to allow easily attaching notification callbacks to jobs.
019 * </p>
020 *
021 * @author jeremy
022 */
023 public class FutureCallbackExecutor extends ThreadPoolExecutor {
024
025 public FutureCallbackExecutor(final int poolSize, final int maxPoolSize,
026 final long keepAlive, final TimeUnit units,
027 final BlockingQueue<Runnable> queue) {
028 super(poolSize, maxPoolSize, keepAlive, units, queue);
029 }
030
031 @Override
032 protected <T> FutureCallbackTask<T> newTaskFor(final Callable<T> callable) {
033 return new FutureCallbackTask<T>(callable);
034 }
035
036 @Override
037 protected <T> FutureCallbackTask<T> newTaskFor(final Runnable runnable,
038 final T value) {
039 return new FutureCallbackTask<T>(runnable, value);
040 }
041
042 @Override
043 public <T> FutureCallbackTask<T> submit(final Callable<T> callable) {
044 final FutureCallbackTask<T> f = newTaskFor(callable);
045 execute(f);
046 return f;
047 }
048
049 @Override
050 public <T> FutureCallbackTask<T> submit(final Runnable runnable,
051 final T value) {
052 final FutureCallbackTask<T> f = newTaskFor(runnable, value);
053 execute(f);
054 return f;
055 }
056
057 @Override
058 public FutureCallbackTask<?> submit(final Runnable runnable) {
059 final FutureCallbackTask<?> f = newTaskFor(runnable, null);
060 execute(f);
061 return f;
062 }
063
064 }