线程池框架
Posted laodaodao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线程池框架相关的知识,希望对你有一定的参考价值。
Executor
ThreadPoolExecutor
代码
executorService.execute(task) //提交任务
addWorker() //创建Worker
w = new Worker(firstTask);
Worker(Runnable firstTask) {
setState(-1); // inhibit interrupts until runWorker
this.firstTask = firstTask; // execute方法提交的任务
this.thread = getThreadFactory().newThread(this); // 创建Worker时创建任务的执行载体 线程
}
workers.add(w); // 往set中存放worker
线程
w.thread.start(); // 启动线程
w.thread.run() // 操作系统调度线程执行
worker.run()
task.run()
想象画面
线程池 得有个线程工厂源源不断生产线程、有一系列的Workers用于执行任务(用线程去跑任务)、
就像穿手串,有工人(Worker),有线团(ThreadFactory)生产线(Thread)、有珠子(Runnable珠子在run滚哈哈哈哈),
工人会将送过来的珠子 前后加个垫圈穿进线中,run起来
组件分析
1.一个threadFactory 用于创建线程 执行任务
newThread()工厂方法
2.wokers HashSet
Worker实现、依赖 Runnable
包含firstTask(任务)
对任务的包装,提交给线程池任务执行的前后处理 依赖的的Runnable是提交给线程池的
依赖Thread 每个创建一个Thread,执行包装任务
3.workQueue:任务执行前保存任务的队列,仅保存由execute方法提交的Runnable任务。
BlockingQueue 并发集合 生产、消费 由主线程提交任务作为生产
线程池有空闲线程(worker)时执行任务(消费)
if (workerCountOf(c) >= corePoolSize)
workQueue.offer(command) 当达到coreSize之后会将任务放在任务队列里
以上是关于线程池框架的主要内容,如果未能解决你的问题,请参考以下文章