线程池框架

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之后会将任务放在任务队列里












以上是关于线程池框架的主要内容,如果未能解决你的问题,请参考以下文章

稳定性 耗时 监控原因分析-- dubbo rpc 框架 的线程池,io 连接模型. 客户端,服务端

Java 线程池框架核心代码分析

线程池与并行度

Java 线程池框架核心代码分析

Java——线程池

Java线程池详解