一.在什么情况下使用线程池 :1.单个任务处理的时间比较短 2.需处理的任务的数量大
二.线程池就像是一把双刃剑,有利也有弊
使用线程池的好处:
1.减少在创建和销毁线程上所花的时间以及系统资源的开销
2.如不使用线程池,有可能造成系统创建大量线程而导致消耗完系统内存以及”过度切换”。 使用线程池的弊端: 1. 用线程池构建的应用程序容易遭受任何其它多线程应用程序容易遭受的所有并发风险,诸如同步错误和死锁,它还容易遭受特定于线程池死锁、资源不足和线程泄漏并发错误,线程池和其它排队机制依靠使用 wait() 和 notify() 方法,这两个方法都难于使用。2.如果编码不正确,那么可能丢失通知,导致线程保持空闲状态,尽管队列中有工作要处理。
三. 线程池的分类及意义:
1.创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,如果无可回收,则新建线程 2.创建一个指定工作线程数量的线程池。每当提交一个任务就创建一个工作线程,如果工作线程数量达到线程池初始的最大数,则将提交的任务存入到池队列中。 3.创建一个单线程化的Executor,即只创建唯一的工作者线程来执行任务,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行 4.创建一个定长的线程池,而且支持定时的以及周期性的任务执行,支持定时及周期性任务执行