java线程池shutdown和shutdownNow的区别
所属分类 java
浏览量 1534
调用shutdown()方法,线程池设置为SHUTDOWN状态,线程池不接受新任务,等待所有任务执行完毕 (正在执行的任务和工作队列中的任务)
调用shutdownNow()方法,线程池设置为STOP状态,线程池不接受新任务,并且会尝试终止正在执行的任务,返回未执行的任务列表
public void shutdown() {
final ReentrantLock mainLock = this.mainLock;
mainLock.lock();
try {
checkShutdownAccess();
advanceRunState(SHUTDOWN);
// 中断空闲的工作线程 不会中断正在执行任务的工作线程
interruptIdleWorkers();
onShutdown(); // hook for ScheduledThreadPoolExecutor
} finally {
mainLock.unlock();
}
tryTerminate();
}
public List shutdownNow() {
List tasks;
final ReentrantLock mainLock = this.mainLock;
mainLock.lock();
try {
checkShutdownAccess();
advanceRunState(STOP);
// 中断所有工作线程
interruptWorkers();
// 返回任务队列里未执行的任务
tasks = drainQueue();
} finally {
mainLock.unlock();
}
tryTerminate();
return tasks;
}
shutdown 和 shutdownNow 测试代码
上一篇
下一篇
进程线程与协程的区别
ExecutorService中submit和execute的区别
java thread join实现原理
JAVA虚拟机关闭钩子Shutdown Hook使用
职场十大通用准则
客户忠诚的意义