1.在什么情况下使用线程池?
1.单个任务处理的时间比较短
2.将需处理的任务的数量大
2. 使用线程池的好处:
1.减少在创建和销毁线程上所花的时间以及系统资源的开销
2.如不使用线程池,有可能造成系统创建大量线程而导致消耗完系统内存以及”过度切换”。
3. 使用线程池的风险
虽然线程池是构建多线程应用程序的强大机制,但使用它并不是没有风险的。用线程池构建的应用程序容易遭受任何其它多线程应用程序容易遭受的所有并发风险,诸如同步错误和死锁,它还容易遭受特定于线程池的少数其它风险,诸如与池有关的死锁、资源不足和线程泄漏。
4. JDK自带线程池
Java里面线程池的顶级接口是Executor,但是严格意义上讲Executor并不是一个线程池,而只是一个执行线程的工具。真正的线程池接口是ExecutorService。
其中,
ExecutorService: 真正的线程池接口。
ScheduledExecutorService 解决那些需要任务重复执行的问题。
ThreadPoolExecutor ExecutorService的默认实现。
ScheduledThreadPoolExecutor 继承ThreadPoolExecutor的ScheduledExecutorService接口实现,周期性任务调度的类实现。
1、newFixedThreadPool创建一个固定长度的线程池。每当提交一个任务就创建一个工作线程,如果工作线程数量达到线程池初始的最大数,线程池的规模将不再变化。如果某个线程由于发生了未预期的异常而结束,那么线程池将会补充一个新的线程。
2、newCachedThreadPool创建一个可缓存的线程池。这种类型的线程池特点是:
1).工作线程的创建数量几乎没有限制(其实也有限制的,数目为Inter