多线程&线程池

# 线程池的学习笔记总结图

图1:

图2:

# 多线程的三种实现方式:

1.继承Thread类

多线程&线程池_第1张图片

2.实现Runnable类

多线程&线程池_第2张图片

3.实现Callable接口

多线程&线程池_第3张图片

# 线程的常见成员变量

多线程&线程池_第4张图片

# 线程的生命周期

多线程&线程池_第5张图片

# 线程的状态

多线程&线程池_第6张图片

多线程&线程池_第7张图片

多线程&线程池_第8张图片

# 线程池

多线程&线程池_第9张图片

多线程&线程池_第10张图片

# 自定义线程池

多线程&线程池_第11张图片

# 自定义线程池的使用情况的图解

一开始定义好的线程池里面的线程数是0

多线程&线程池_第12张图片

假如提交了 3 个任务,那么线程池就创建好 3 个核心线程来处理

多线程&线程池_第13张图片

多线程&线程池_第14张图片

核心线程都满了,任务队列也满了,但还有多余的任务,则需要创建临时线程

多线程&线程池_第15张图片

任务10的提交,会导致触发拒绝策略

多线程&线程池_第16张图片

# 任务拒绝策略:

多线程&线程池_第17张图片

自定义线程池代码示例:

多线程&线程池_第18张图片

总结:

多线程&线程池_第19张图片

线程池学习笔记2:

多线程&线程池_第20张图片

阿里巴巴开发手册 不推荐 使用自带的线程池工具类,为什么?

多线程&线程池_第21张图片

ThreadPoolExecutor 池状态

多线程&线程池_第22张图片

 线程池状态变化 

多线程&线程池_第23张图片

线程池中的主要成员变量

多线程&线程池_第24张图片

 

 # 线程池的execute方法执行

首先执行execute方法

多线程&线程池_第25张图片

 

 进到源码,可以看到execute的执行内容

    public void execute(Runnable command) {
        // 首先是健壮性判断
        if (command == null)
            throw new NullPointerException();
        // 这里是获取核心线程数
        int c = ctl.get();
        // 判断工作线程是否少于核心线程数
        if (workerCountOf(c) < corePoolSize) {
            // 如果少于,需要创建新的任务线程,如果addWorker返回false,
            // 证明核心线程初始化过了,返回true就直接结束
            if (addWorker(command, true))
                return;
            c = ctl.get();
        }
        // 如果线程池属于RUNNING状态,那就添加到任务队列,如果添加成功,进入if
        if (isRunning(c) && workQueue.offer(command)) {
            // 重新获取ctl属性
            int recheck = ctl.get();
            // 再次判断是否是RUNNING状态,如果不是了,
            // 就执行remove删掉添加到阻塞队列的任务
            if (!isRunning(recheck) && remove(command))
                // 拒绝任务
                reject(command);
            // 如果线程数为0
            else if (workerCountOf(recheck) == 0)
                // 添加一个线程,避免出现队列任务没有线程执行的情况
                addWorker(null, false);
        }
        // 如果不能入队列,就尝试创建最大线程数
        else if (!addWorker(command, false))
            // 如果创建最大线程数失败,直接拒绝任务
            reject(command);
    }

 这里可以继续看正常流程,如果任务需要执行,就会执行addWorker方法

 多线程&线程池_第26张图片

多线程&线程池_第27张图片

多线程&线程池_第28张图片

 

 

你可能感兴趣的:(juc,interview,java,juc)