下面列出了java.util.concurrent.ThreadPoolExecutor#isTerminating ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
public void saveAll(File dir, ProgressMonitor progressMonitor) {
Runnable save = () -> {
try {
decompiler.getArgs().setRootDir(dir);
ThreadPoolExecutor ex = (ThreadPoolExecutor) decompiler.getSaveExecutor();
ex.shutdown();
while (ex.isTerminating()) {
long total = ex.getTaskCount();
long done = ex.getCompletedTaskCount();
progressMonitor.setProgress((int) (done * 100.0 / total));
Thread.sleep(500);
}
progressMonitor.close();
LOG.info("decompilation complete, freeing memory ...");
decompiler.getClasses().forEach(JavaClass::unload);
LOG.info("done");
} catch (InterruptedException e) {
LOG.error("Save interrupted", e);
Thread.currentThread().interrupt();
}
};
new Thread(save).start();
}
static synchronized ThreadPoolExecutor getExecutor(ThreadPoolBuilder builder,
Map<String, Object> poolCache) {
ThreadPoolExecutor pool = (ThreadPoolExecutor) poolCache.get(builder.getName());
if (pool == null || pool.isTerminating() || pool.isShutdown()) {
pool = getDefaultExecutor(builder);
LOG.info("Creating new pool for " + builder.getName());
poolCache.put(builder.getName(), pool);
}
((ShutdownOnUnusedThreadPoolExecutor) pool).addReference();
return pool;
}
static synchronized ThreadPoolExecutor getExecutor(ThreadPoolBuilder builder,
Map<String, Object> poolCache) {
ThreadPoolExecutor pool = (ThreadPoolExecutor) poolCache.get(builder.getName());
if (pool == null || pool.isTerminating() || pool.isShutdown()) {
pool = getDefaultExecutor(builder);
LOGGER.info("Creating new pool for " + builder.getName());
poolCache.put(builder.getName(), pool);
}
((ShutdownOnUnusedThreadPoolExecutor) pool).addReference();
return pool;
}
static synchronized ThreadPoolExecutor getExecutor(ThreadPoolBuilder builder,
Map<String, Object> poolCache) {
ThreadPoolExecutor pool = (ThreadPoolExecutor) poolCache.get(builder.getName());
if (pool == null || pool.isTerminating() || pool.isShutdown()) {
pool = getDefaultExecutor(builder);
LOG.info("Creating new pool for " + builder.getName());
poolCache.put(builder.getName(), pool);
}
((ShutdownOnUnusedThreadPoolExecutor) pool).addReference();
return pool;
}
@Override
public void rejectedExecution(final Runnable r, final ThreadPoolExecutor tpe) {
if (null == r || null == tpe || tpe.isShutdown() || tpe.isTerminated() || tpe.isTerminating()) {
return;
}
try {
if (!tpe.getQueue().offer(r, timeout, seconds)) {
throw new RejectedExecutionException("Timeout waiting for executor slot: waited " + timeout + " " + seconds.toString().toLowerCase());
}
} catch (final InterruptedException e) {
throw new RejectedExecutionException("Interrupted waiting for executor slot");
}
}