|
71 | 71 | | 4| DiscardPolicy| 丢弃当前的线程任务而不做任何处理。如果系统允许在资源不足的情况相下丢弃部分任务,则这将是保障系统安全、稳定的一种很好的方案。|
|
72 | 72 | | 5| 自定义拒绝策略| 以上四种拒绝策略无法满足实际需要,用户可以扩展RejectedExecutionHandler接口实现拒绝策略。|
|
73 | 73 |
|
74 |
| -##5.5种常用的线程池 |
| 74 | +##5.五种常用的线程池 |
75 | 75 |
|
76 | 76 | | 序号| 名称| 说明|
|
77 | 77 | | :--:| :---------------------:| :--------------------------:|
|
|
81 | 81 | | 4| newSingleThreadExecutor| 单个线程的线程池|
|
82 | 82 | | 5| newWorkStealingPool| 足够大小的线程池,JDK1.8新增|
|
83 | 83 |
|
84 |
| -##6.线程池的好处 |
| 84 | +##6. 向线程池提交任务 |
| 85 | + |
| 86 | +- execute()方法:当提交不需要返回值的任务,缺点无法判断任务是否被线程池执行成功; |
| 87 | +- submit()方法:当提交需要返回值的任务,此时线程池会返回一个future类型的对象,通过该对象可以判断线程池是否执行成功,并且可以通过调用该对象的get()方法获取返回值; |
| 88 | + |
| 89 | +##7. 关闭线程池 |
| 90 | + |
| 91 | +关闭线程池可以调用shutdown或者shutdownNow方法。区别如下: |
| 92 | + |
| 93 | +- 共同点: |
| 94 | +- 它们的原理都是遍历线程池中的工作线程,然后逐个调用线程的interrupt方法来中断线程( 无法响应中断的任务可能永远无法终止)。 |
| 95 | +- 不同点: |
| 96 | +- shutdownNow首先将线程池的状态设置为STOP,然后尝试停止所有的正在执行或暂停任务的线程。 |
| 97 | +- shutdown只是将线程池的状态设置成SHOTDOWN状态,然后中断所有没有正在执行任务的线程。 |
| 98 | + |
| 99 | +**总结:通常调用shutdown方法来关闭线程池,如果任务不一定要执行完,则可以调用shutdownNow方法。** |
| 100 | + |
| 101 | +##总结 |
| 102 | + |
| 103 | +**线程池的好处** |
85 | 104 |
|
86 | 105 | + 降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁的消耗。
|
87 | 106 | + 提高响应速度。当任务到达时,任务可以不需要的等到线程创建就能立即执行。
|
88 |
| -+ 提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。 |
| 107 | ++ 提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。 |