线程池 ThreadPoolExecutor 执行任务原理

本文深入探讨了Java线程池的工作原理,重点关注execute方法的调用,addWorker方法如何创建并启动线程,以及Worker类如何通过线程工厂获取线程并执行任务。线程池通过Worker类的内部状态管理和任务运行,实现了高效的线程复用和任务调度。
摘要由CSDN通过智能技术生成

 1.调用线程池的execute方法

public void execute(Runnable command) {
    ......
    addWorker(command, true)
    ......
}

2.addWorker方法

private boolean addWorker(Runnable firstTask, boolean core) {
        ......
        w = new Worker(firstTask);
        final Thread t = w.thread;
        ......
        t.start();
        ......
      
}

3.线程池内部类-Worker,从线程工厂对象中获取一个线程,传入当前任务对象引用

  private final class Worker
        extends AbstractQueuedSynchronizer
        implements Runnable
Worker(Runnable firstTask) {
    setState(-1); // inhibit interrupts until runWorker
    this.firstTask = firstTask;
    this.thread = getThreadFactory().newThread(this);
}

4. addWork()方法内部调用 t.start()后,执行Worker对象的run方法

public void run() {
    runWorker(this);
}


final void runWorker(Worker w) {
    Thread wt = Thread.currentThread();
    Runnable task = w.firstTask;
    ......
    task.run();
    ......
              
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值