java多线程知识总结(二)
使用线程池的好处:
1.重用存在的线程,减少对象创建、消亡的开销
2.有效控制最大并发数,提高系统资源使用率
3.定时执行、定期执行
线程池所在的包是java.util .concurrent
顶级接口是Executor,真正的线程池接口是ExecutorService
java.util.concurrent.Executors类提供创建线程池的方法
方法名 说明
newCachedThreadPool() 创建一个可缓存的线程池,有任务时才创建新任务
newSingleThreadExecutor() 创建一个单线程池
newFixedThreadPool(int n Threads) 创建一个固定长度的线程池,空闲线程会一直保留参数n Threads设定线程池中线程的数目
newScheduledThreadPool(int corePoolSize) 创建了一个固定长度的线程池而且以延迟或定时的方式来执行任务
shutdown() 关闭一个线程
ThreadPoolExecutor类构造器中各个参数的含义:
corePoolSize:核心池的大小
maximumPoolSize:线程池的最大线程数
keepAliveTime:表示线程没有任务执行时最多保持多久时间会终止
unit:参数keepAliveTime的时间单位
workQuene:一个阻塞队列,用来存储等待执行的任务
ThreadFactory:线程工厂,主要用来创建线程
handler:表示拒绝处理任务时的策略(报异常)
死锁:
即两个线程都在等待对方先完成,造成程序的停滞
死锁条件:
1.两个或两个以上的线程在活动
2.某个线程到一个所后,还想拿第二个锁,造成锁的嵌套。