上一页 1 ··· 6 7 8 9 10 11 12 13 14 ··· 23 下一页
摘要: 1.介紹 线程池本身提供了大量数据统计相关的方法、扩容方法、预创建方法等等。 2.核心线程相关 getCorePoolSize():获取核心线程数。 setCorePoolSize():重新设置线程池的核心线程数。 prestartCoreThread():预启动一个核心线程,当且仅当工作线程数量小 阅读全文
posted @ 2020-09-03 10:55 小窝蜗 阅读(205) 评论(0) 推荐(0) 编辑
摘要: 1.方法 reject(Runnable command)方法很简单: final void reject(Runnable command) { handler.rejectedExecution(command, this); } 调用线程池持有的成员RejectedExecutionHandl 阅读全文
posted @ 2020-09-03 10:44 小窝蜗 阅读(175) 评论(0) 推荐(0) 编辑
摘要: 1.主要的变量 private final ReentrantLock mainLock = new ReentrantLock(); private final Condition termination = mainLock.newCondition(); 2.ThreadPoolExecuto 阅读全文
posted @ 2020-09-03 10:39 小窝蜗 阅读(658) 评论(0) 推荐(0) 编辑
摘要: 1.介绍 shutdown()方法中会通过interruptIdleWorkers()中断所有的空闲线程, 这个时候有可能有非空闲的线程在执行某个任务,执行任务完毕之后, 如果它刚好是核心线程,就会在下一轮循环阻塞在任务队列的take()方法, 如果不 做额外的干预,它甚至会在线程池关闭之后永久阻塞 阅读全文
posted @ 2020-09-02 17:30 小窝蜗 阅读(295) 评论(0) 推荐(0) 编辑
摘要: 1.介绍 每个工作线程终结的时候都会调用tryTerminate()方法 2.源码 final void tryTerminate() { for (;;) { int c = ctl.get(); // 判断线程池的状态,如果是下面三种情况下的任意一种则直接返回: // 1.线程池处于RUNNIN 阅读全文
posted @ 2020-09-02 17:21 小窝蜗 阅读(951) 评论(0) 推荐(0) 编辑
摘要: 1.介绍 processWorkerExit()方法是为将要终结的Worker做一次清理和数据记录工作 (因为processWorkerExit()方法也包裹在runWorker()方法finally代码块中, 其实工作线程在执行完processWorkerExit()方法才算真正的终结)。 2.源 阅读全文
posted @ 2020-09-02 17:14 小窝蜗 阅读(1054) 评论(1) 推荐(0) 编辑
摘要: 1.介绍 getTask()方法是工作线程在while死循环中获取任务队列中的任务对象的方法 2.源码 private Runnable getTask() { // 记录上一次从队列中拉取的时候是否超时 boolean timedOut = false; // Did the last poll( 阅读全文
posted @ 2020-09-02 17:06 小窝蜗 阅读(855) 评论(0) 推荐(0) 编辑
摘要: 1.介绍 线程池中的每一个具体的工作线程被包装为内部类Worker实例, Worker继承于AbstractQueuedSynchronizer(AQS),实现了Runnable接口 2.实现了Runnable接口 private final class Worker extends Abstrac 阅读全文
posted @ 2020-09-02 16:52 小窝蜗 阅读(289) 评论(0) 推荐(0) 编辑
摘要: 1.方法:boolean addWorker(Runnable firstTask, boolean core) 方法的第一的参数可以用于直接传入任务实例, 第二个参数用于标识将要创建的工作线程是否核心线程。 2.方法源码 // 添加工作线程,如果返回false说明没有新创建工作线程,如果返回tru 阅读全文
posted @ 2020-09-02 16:13 小窝蜗 阅读(401) 评论(0) 推荐(0) 编辑
摘要: 1.execute方法源码分析 线程池异步执行任务的方法实现是ThreadPoolExecutor#execute(),源码如下: // 执行命令,其中命令(下面称任务)对象是Runnable的实例 public void execute(Runnable command) { // 判断命令(任务 阅读全文
posted @ 2020-09-02 16:08 小窝蜗 阅读(335) 评论(0) 推荐(0) 编辑
上一页 1 ··· 6 7 8 9 10 11 12 13 14 ··· 23 下一页