线程池的总结

线程池的作用

1.限制工作线程的数目;
2.减少创建和销毁线程的次数;
3.线程可以被重复利用;
4.可以根据系统的承受能力来调整工作线程的数目;

配置线程池的静态工厂方法

1.newSingleTheadExecutor
创建单个线程的线程池;线程池中只有一个线程;适合顺序执行并输出任务的场景;没有并发执行
2.newFixedTheadExecutor
创建固定大小的线程池;每执行一个任务就会创建一个线程;当线程数达到线程池大小时就保持不变;只有核心线程。
3.newCachedTheadExecutor
创建具有缓存能力的线程池;当线程池大小超过了当前执行任务所需要的的线程,就会自动回收空闲的线程。当增加了新任务就会自动添加线程来执行。不会固定线程池的大小。
4.newScheduleTheadExecutor
创建一个大小无限的线程池;周期性执行任务的线程池。有核心线程也有非核心线程。

线程池和多线程的区别

1.线程池是在程序开始就创建多个线程,不用的时候就挂起;多线程是在任务到来的时候再创建。
2.线程池中的线程不会被回收,而多线程中的线程执行完任务后就会被回收;
3.线程池比多线程效率更高。

线程池的执行过程

1.当一个任务来到线程池,就会先选择核心线程去执行该任务;
2.一个新的任务到来时,首先判断核心线程是否还有,如果核心线程没有就会继续查看任务队列是否有空位;如果有则将任务放入任务队列。
3.当任务到来发现核心线程和任务队列都满了就判断线程池是否满了,如果没有满 就开启非核心线程来执行任务。
4.如果线程池满了,新任务会触发线程池中的饱和策略来想外抛出异常。

线程池的组成部分

1.线程池管理器:管理线程池中线程的创建、销毁和分配;
2.工作线程:核心线程和非核心线程
3.任务队列:阻塞队列
4.任务

线程池的几种阻塞队列

ArrayBlockingQueue:基于数组结构的阻塞队列
LinkedBlockingQueue:基于链表结构的阻塞队列
PriorityBlockingQueue:基于优先级的有序的阻塞队列
DelayBlockingQueue:
SynchronousQueue:不存储元素的阻塞队列,来一个处理一个。

核心线程和非核心线程的区别

核心线程不使用时不会被回收。非核心线程会被回收。

线程池和线程的多种状态

线程池:
1.running:线程池处于运行状态
2.shutdown:线程池不接受新任务。但是会处理堆积的任务
3.stop:线程池不接受新任务,也没有需要处理的任务,并且中段正在运行的任务;
4.tidying:所有任务都终止,并且任务数量为空
5.terminated:线程池彻底终止

线程:
1.新建(new)
2.就绪 (Runnable)执行线程对象 的t.start()方法;
3.运行(Running)线程获取到cpu资源
4.阻塞(Blocked)由于某种原因失去了cpu资源。
等待阻塞:调用了对象线程的wait()
同步阻塞: 获取了synchronized同步锁失败;
其他阻塞:调用线程对象的其他sleep() 、join()、yield() .(注意yield是将运行状态切换到就绪状态)
5.死亡(Dead)线程执行完或异常退出

wait()\ notify() \ notifyAll() \ sleep() \ join() \ yield()

wait():线程释放锁,进入等待即阻塞状态
notify(): 唤醒任意一个等待的线程
notifyAll():唤醒所有等待的线程
sleep(): 线程进入睡眠状态,但是不会释放锁;
join():调用其他线程的join()方法,就开始运行另一个线程就知道结束在运行该线程。会抛异常。
yield():将线程状态由运行状态转到就绪状态,让给与自己的优先级高的或同优先级的线程执行。不会抛异常

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值