据我所知,执行器有助于处理可运行文件的执行。例如,当我有几个工作线程完成它们的工作然后终止时,我会选择使用执行器。执行器将处理线程的创建和终止,这些线程是执行工作者可运行程序所必需的。
然而,现在我面临另一种情况。固定数量的类/对象应封装它们自己的线程。因此,线程是在创建这些对象时开始的,线程将在这些对象的整个生命周期内继续运行。少数对象依次在程序开始时创建,并在整个运行时间内存在。我想在这种情况下,线程比执行器更可取,但当我读到互联网时,每个人似乎都建议在任何可能的情况下使用线程上的执行器。
有人能告诉我我是想在这里选择执行器还是线程,为什么?
感谢
您在某种程度上混淆了事物。Executor
只是一个接口。Thread
是一个核心类。没有任何东西直接暗示Executor
实现在单独的线程中执行任务。
阅读JavaDoc的前几行。
执行器
因此,如果你想要完全控制,只需使用Thread
并自己做事。
在不了解更多上下文的情况下,很难给出一个好的答案,但总的来说,需要使用Thread
的情况很少。如果你开始尝试使用synchronized
"手动"同步你的程序,我敢打赌事情会很快失控。(更不用说调试代码有多难了。)
我上一次使用线程是在我想在后台录制一些音频的时候。这是一种"开始"/"停止"的事情,而不是"以任务为导向"。(我花了很长时间努力寻找一个音频库来为我封装它,但失败了。)
如果您选择使用线程解决方案,我建议您尝试将线程的范围限制为仅在关联对象内执行。这将在很大程度上避免迫使您在整个代码中考虑关系之前发生的事情、值的线程安全发布等。
ExecutorService
可以具有线程池
它优化了性能,因为创建线程的成本很高。
ExecutorService
具有生命周期控制
提供了CCD_ 9、CCD_。
ExecutorService
具有灵活性
您可以调用各种行为:自定义ThreadFactory
、设置线程池大小、延迟行为ScheduledThreadPoolExecutor
等。