线程在这里比Executor更受青睐吗?

flx*_*lxh 6 java concurrency executorservice

据我所知,Executors帮助处理runnables的执行.例如,当我有几个工作线程完成工作然后终止时,我会选择使用执行程序.执行程序将处理执行worker runnable所需的Threads的创建和终止.

但是现在我面临另一种情况.固定数量的类/对象应封装自己的线程.因此,线程在创建这些对象时启动,并且Thread将在这些对象的整个生命周期中继续运行.反过来,少数对象在程序开始时创建,并在整个运行时间内存在.在这种情况下,我猜Threads比Executors更受欢迎,但是当我阅读互联网时,每个人似乎都建议在任何可能的情况下使用Executors over Threads.

有人可以告诉我,如果我想在这里选择Executors或Threads,为什么?

谢谢

aio*_*obe 1

在不了解更多上下文的情况下,很难给出一个好的答案,但一般来说,我想说,需要使用的情况Thread非常少。如果您开始尝试使用“手动”同步程序,synchronized我敢打赌事情很快就会失控。(更不用说调试代码有多困难了。)

上次我使用线程是当我想在后台录制一些音频时。这是一种“开始”/“停止”的事情,而不是“面向任务”的事情。(我花了很长时间努力寻找一个音频库来为我封装它,但失败了。)

如果您选择采用线程解决方案,我建议您尝试将线程的范围限制为仅在关联的对象内执行。这将在很大程度上避免迫使您在整个代码中考虑发生之前的关系、线程安全的值发布等。

  • @user3187049 恕我直言,继续使用它,先学习底层的东西。然后你就会对更高层次的东西感到非常自在。:) (2认同)