...
| Code Block | ||
|---|---|---|
| ||
final class PoolService {
private static final ThreadFactory factory = new
new ExceptionThreadFactory(new MyExceptionHandler());
private static final ExecutorService pool =
Executors.newFixedThreadPool(10, factory);
public void doSomething() {
pool.execute(new Task()); // Task is a runnable class
}
public static class ExceptionThreadFactory implements ThreadFactory {
private static final ThreadFactory defaultFactory =
Executors.defaultThreadFactory();
private final Thread.UncaughtExceptionHandler handler;
public ExceptionThreadFactory(
Thread.UncaughtExceptionHandler handler)
{
this.handler = handler;
}
@Override public Thread newThread(Runnable run) {
Thread thread = defaultFactory.newThread(run);
thread.setUncaughtExceptionHandler(handler);
return thread;
}
}
public static class MyExceptionHandler extends ExceptionReporter
implements Thread.UncaughtExceptionHandler {
// ...
@Override public void uncaughtException(Thread thread, Throwable t) {
// Recovery or logging code
}
}
}
|
...
<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="ec91d666a1b2a25e-305b86d6-4e634954-9277bfae-4dd8fa17522515c144e2b34f"><ac:plain-text-body><![CDATA[ | [[API 2006 | AA. References#API 06]] | Interfaces | ]]></ac:plain-text-body></ac:structured-macro> |
<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="5b8e5fbcf920f261-62c4ba19-459643a3-953bb13f-ce13f233c23f7938556503ce"><ac:plain-text-body><![CDATA[ | [[Goetz 2006 | AA. References#Goetz 06]] | Chapter 7.3, Handling Abnormal Thread Termination | ]]></ac:plain-text-body></ac:structured-macro> |
...