https://open8gu.com/concurrent/thread-pool/ktpque4ighgox3gv/
线程池通常指 JDK 中 Executor
接口中最通用也是最常用的实现类 ThreadPoolExecutor
,它基于生产者与消费者模型实现,从功能上可以分为三个部分:
Thread
对象的内部类 Worker
,当一个 Wroker
被创建并启动以后,它将会不断的从工作队列中获取并执行任务,直到它因为获取任务超时、任务执行异常或线程池停机后才会终止运行。当我们向线程池提交任务时,线程池将根据下述逻辑处理任务:
而当一个工作线程启动以后,它将会在一个 while 循环中重复执行下述逻辑:
getTask
方法从工作队列中获取任务,如果拿不到任务就阻塞一段时间,直到超时或者获取到任务。如果成功获取到任务就进入下一步,否则就直接进入线程退出流程;