package eu.thog92.launcher.download;
import java.util.concurrent.*;
public class ExceptionalThreadPoolExecutor extends ThreadPoolExecutor
{
public ExceptionalThreadPoolExecutor(final int threadCount)
{
super(threadCount, threadCount, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>());
}
@SuppressWarnings("unchecked")
@Override
protected void afterExecute(final Runnable r, Throwable t)
{
super.afterExecute(r, t);
if (t == null && r instanceof Future)
try
{
final Future<Runnable> future = (Future<Runnable>) r;
if (future.isDone())
future.get();
} catch (final CancellationException ce)
{
} catch (final ExecutionException ee)
{
} catch (final InterruptedException ie)
{
Thread.currentThread().interrupt();
}
}
@Override
protected <T> RunnableFuture<T> newTaskFor(final Callable<T> callable)
{
return new ExceptionalFutureTask<T>(callable);
}
@Override
protected <T> RunnableFuture<T> newTaskFor(final Runnable runnable, final T value)
{
return new ExceptionalFutureTask<T>(runnable, value);
}
public class ExceptionalFutureTask<T> extends FutureTask<T>
{
public ExceptionalFutureTask(final Callable<T> callable)
{
super(callable);
}
public ExceptionalFutureTask(final Runnable runnable, final T value)
{
super(runnable, value);
}
@Override
protected void done()
{
try
{
get();
} catch (final Throwable t)
{
t.printStackTrace();
}
}
}
}