创建Worker对象,同时也会实例化一个Thread对象。
启动启动这个线程
3、再到Worker里看看其实现
可以看到在创建Worker时会调用threadFactory来创建一个线程。上边的②中启动一个线程就会触发Worker的run方法被线程调用。
4、接下来咱们看看runWorker方法的逻辑
线程调用runWoker,会while循环调用getTask方法从workerQueue里读取任务,然后执行任务。只要getTask方法不返回,此线程就不会退出。
5、最后在看看getTask方法实现
咱们先不管allowCoreThreadTimeOut,这个变量默认值是false。wc>corePoolSize则是判断当前线程数是否大于corePoolSize。
如果当前线程数大于corePoolSize,则会调用workQueue的poll方法获取任务,超时时间是keepAliveTime。如果超过keepAliveTime时长,poll返回了,上边提到的while循序就会退出,线程也就执行完了。
如果当前线程数小于corePoolSize,则会调用workQueue的take方法阻塞在当前。
作者 | 清泉;来源 | cnblogs.com/qingquanzi/p/8146638.html