类似于 web 服务器这种多任务情况时,不可能只用一个线程来对外提供服务。这样效率和吞吐量都太低。
但是也不能来一个请求就创建一个线程,因为创建线程的成本很高,系统能创建的线程数量是有限的。
于是 Executor 就出现 了。
线程创建太少了浪费服务器资源,另外线程创建多了又搞得服务器很累。两个极端的结果都是对外的吞吐量上不去。
所以线程是需要统一管理的,不能随便 new Thread().start()。
Executor 提供了 四种线程池 。
包括:关闭和强制关闭、是否关闭、是否中断、等待中断、提交任务、批量提交任务。
多个任务如果可以并行那最好就让它并行:
通常,执行时间相差很大的异构任务的并行没有意义,执行时间受限于执行时间最长的那个任务:
这种情况,要考虑的是把 taskA 给分解了。
ExecutorCompletionService 可以批量提交任务并获取执行结果;
来源: http://www.bubuko.com/infodetail-2447094.html