未验证 提交 aace6834 编写于 作者: M ma-xiao-guang-64 提交者: GitHub

ExecutorEngine略微优雅一点的关闭

ExecutorEngine略微优雅一点的关闭
上级 8faeff23
......@@ -60,6 +60,9 @@ import java.util.concurrent.TimeUnit;
@Slf4j
public final class ExecutorEngine implements AutoCloseable {
private static final ThreadPoolExecutor shutdownExecutor = new ThreadPoolExecutor(
0, 1, 0, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>(10), new ThreadFactoryBuilder().setDaemon(true).setNameFormat("ShardingJDBC-ExecutorEngineCloseTimer%d").build());
private final ListeningExecutorService executorService;
public ExecutorEngine(final int executorSize) {
......@@ -214,13 +217,35 @@ public final class ExecutorEngine implements AutoCloseable {
@Override
public void close() {
executorService.shutdownNow();
executorService.shutdown();
try {
executorService.awaitTermination(5, TimeUnit.SECONDS);
if (!executorService.awaitTermination(5, TimeUnit.MILLISECONDS)) {
executorService.shutdownNow();
}
} catch (final InterruptedException ignored) {
}
if (!executorService.isTerminated()) {
throw new ShardingJdbcException("ExecutorEngine can not been terminated");
newThreadToClose();
}
}
private void newThreadToClose() {
shutdownExecutor.execute(new Runnable() {
@Override
public void run() {
try {
for (int i = 0; i < 10000; i++) {
executorService.shutdownNow();
if (executorService.awaitTermination(5, TimeUnit.MILLISECONDS)) {
break;
}
}
log.error("ExecutorEngine can not been terminated");
} catch (InterruptedException ignored) {
}
}
});
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册