前言
最近在使用ExecutorService的时候,对于与ExecutorService相关的概念有些迷糊,
加上本身ExecutorService内部的有些方法名在取名上也容易让使用者误解,导致
犯了一些错误。在解决的过程中,偶尔看到了日本人写的一篇文章简单明了,通俗易懂
所以想着翻译成中文希望能够帮助到与我有一样困惑的程序员朋友们。
原文地址如下:
闲话少说,文章如下
虽然使用ExecutorService可以让线程处理变的很简单,
可是有没有人觉得在结束线程运行时候只调用shutdown方法就可以了?
实际上,只调用shutdown方法的是不够的。
我们用学校的老师和学生的关系来说明这个问题。
shutdown只是起到通知的作用
我们来假设如下场景:
学校里在课上老师出了一些问题安排全班同学进行解答并对学生说“开问题解答完毕后请举手示意!”
如果有学生解答完毕后会举手对老师说“老师我做完了!”,如果大家都解题完毕后上课结束。
上面的场景对应于ExecutorService里的方法的话是下面的样子。
老师: ExecutorService
学生: ExecutorService里的线程
问题: 通过参数传递给ExecutorService.execute的任务(Runnable)
授课: main线程
学校: Java进程
“问题解答完毕后请举手示意!”是shutdown方法。“老师我做完了!”是各个任务(Runnable)的运行结束。
所有的任务(Runnable)都结束了的话main线程(授课)也结束了。
在这里,我们假设试卷中有难度较大的