java多线程源码

线程:

Thread :线程类,实现runaable接口,拥有一个Runnable对象属性,start方法把Thread对象放进ThreadGroup,然后执行start0方法,进入jvm在cpu调度时执行run方法,Thread类的run方法默认时执行Runnable的run方法;

Runnable :可运行接口,只有一个run方法,通过Thread的构造函数的参数构造线程,Thread是执行者,而Runnable是任务,就像给执行者分配任务一样;

Callable :  可调用接口,只有一个带返回值的call方法,作为FutureTask的属性,而FutureTask是Runnable的后代实现类,可作为Thread的构造参数构造线程,FutureTask的run方法执行Callable的call方法,

      并把返回值存在object中,通过get方法获取返回值;

ThreadGroup : 线程组,线程存放在一个线程数组中,线程组之间的关系是树(父子结构),可以批量管理线程或线程组对象;

 

线程工具:

Executors : 线程工具类,用来转换Callable对象、创建线程池、获取线程工厂;

 

线程池 : 

ThreadPoolExecutor : 线程池类,本质是一个WorkerSet,当执行一个线程时,若工人数目小于核心线程数则直接创建工人线程执行任务,

          若大于核心线程数,但是阻塞队列没满,则进入阻塞队列等待分配工人线程,

          若阻塞队列满了,但工人数目小于最大线程数,则新增线程来处理,

          若大于最大线程数,执行拒绝策略;

CachedThreaPool : 带缓存线程池,核心线程数 = 0,最大线程数 = Integer类型最大值, 存活时间 = 60L ,单位 = 秒, 阻塞队列 = 同步队列 ,线程创建方法 = 默认线程工厂, 拒绝策略 = 丢弃任务抛出异常

FixedThreadPool : 固定大小线程池, 核心线程数 = 参数,最大线程数 = 参数, 存活时间 = 0 ,单位 = 毫秒, 阻塞队列 = 链表队列 ,线程创建方法 = 默认线程工厂, 拒绝策略 = 丢弃任务抛出异常

SingleThreadExecutor : 固定为1的线程池,核心线程数 = 1,最大线程数 = 1, 存活时间 = 0 ,单位 = 毫秒, 阻塞队列 = 链表队列 ,线程创建方法 = 默认线程工厂, 拒绝策略 = 丢弃任务抛出异常

ScheduledThreadPool : 周期执行线程池,核心线程数 = 参数,最大线程数 = Integer类型最大值, 存活时间 = 0 ,单位 = 纳秒, 阻塞队列 = 延迟队列 ,线程创建方法 = 默认线程工厂, 拒绝策略 = 丢弃任务抛出异常

SingleThreadScheduledExecutor :  固定为1的周期执行线程池,new ScheduledThreadPool(1);

 

阻塞队列 : 数组队列、链表队列、延迟队列、优先级队列、同步队列

拒绝策略 : 丢弃任务抛出异常、丢弃任务不处理、丢弃阻塞队列最前面线程再次提交、提交任务的线程执行

 

posted on 2021-10-28 15:11  .11  阅读(55)  评论(0编辑  收藏  举报