1.线程池的好处:
(1)降低资源消耗:利用已创建的线程降低创建和消耗的浪费;
(2)方便管理:同一分配,调优和监控。防止无限创建;
(3)提高响应速度:任务到达时,不需要等线程创建就立即执行。
2.execute()和submit()方法
execute提交不需要返回值的任务,无法判断任务是否被线程池执行成功;而submit提交有返回值的,一个future对象,判断任务是否执行。
3.线程池核心参数
核心线程;最大线程;线程工厂;非核心线程等待时间;时间单位;拒绝策略;阻塞队列。
拒绝策略:(1)abortpolicy:丢弃报错,默认策略;(2)丢弃不报错;(3)将阻塞队列队首的丢弃。(4)给其他线程池外的线程处理。
4.线程池的类型
1.可缓存的线程池,注意线程数量不然会OOM。
2.固定数量的线程池,超过放队列
3.单线程的,指定顺序如FIFO执行
4.定长的线程池,定时及周期性的任务执行。
5.线程参数
最大线程数:IO为 2N+1;CPU密集的为N+1
AQS
1.使用了模板方法设计模式。
底层通过一个同步队列+条件队列
2.AQS对资源的共享方式分为:
(1)独占:只有一个线程如reentrantlock,分为公平(按顺序)和非公平(直接强,抢到就算)。
(2)共享锁:如semaphore,countdownlatch,读写锁等
3.AQS组件
Atomic原子类
1.atomicInteger
通过CAS和volatile和native