是否有可能为我的整个程序提供一个线程池,以便重新使用线程,或者我是否需要使ExecutorService全局/将其传递给使用它的所有对象。
更准确地说,我在程序中运行了多个任务,但是它们执行得不是很频繁。
ScheduledExecutorService executorService = Executors.newScheduledThreadPool(1);
我认为,不必为每个任务始终保持运行一个完整的线程,但是在执行任务时,每次都重新启动线程可能也很昂贵。
除了使线程池成为全局线程之外,还有更好的选择吗?
如何将线程与其他ExecutorService对象一起重用?
不可能在不同的ExecutorService
线程池中重复使用线程。当然,您可以将非常不同类型的Runnable
类提交给一个公共线程池。
除了使线程池成为全局线程之外,还有更好的选择吗?
我在您的应用程序中没有看到“全局”线程池的问题。当然,有人需要知道何时调用shutdown()
它,但这是我看到的唯一问题。如果您有许多不同的类正在提交任务,则它们都可以访问此(或1个)常见的后台线程集。
但是,您可能会发现,不同的任务可能想要使用缓存的线程池,而其他任务则需要固定大小的池,因此仍然需要多个池。
我认为,不必为每个任务一直运行一个完整的线程,但是在执行任务时每次都重新启动线程可能也很昂贵。
通常,除非您分叉成千上万的线程,否则每隔一段时间启动一次线程的相对成本就相对较小。除非您有探查器或其他来源的证据,否则这可能是过早的优化。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句