Advertisement

面试官:线程池是如何实现线程复用的?有没有听说过类似的机制

阅读量:

ThreadPoolExecutor中是如何做到线程复用的?

我们都知道每个新启动的线程都会被分配一个独立的任务一旦完成这个特定的任务后就会被系统回收资源然而在线程池中设计巧妙地实现了资源利用率在线条执行完各自的任务后会立即释放以便供其他线条使用这种机制的核心逻辑正是通过调用 addWorker() 来实现

addWorker()

  • 先看上半部分addWorker()
复制代码
    private boolean addWorker(Runnable firstTask, boolean core) {
    retry:
    for (;;) {
        int c = ctl.get();
        int rs = runStateOf(c);
    
        // 对边界设定的检查
        if (rs >= SHUTDOWN &&
            ! (rs == SHUTDOWN &&
                firstTask == null &&
                ! workQueue.isEmpty()))
            return false;
    
        for (;;) {
            int wc = workerCo

全部评论 (0)

还没有任何评论哟~