首页  

java线程池shutdown和shutdownNow的区别     所属分类 java 浏览量 1549
调用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使用

职场十大通用准则

客户忠诚的意义