两个短命线程 vs. Executor
Two short-lived threads vs. Executor
在应用程序启动时,我只有两个短期任务要 运行 在后台执行。为每个任务使用一个线程或一个执行器是否有意义,例如,一个单线程执行器来提交这两个任务。
当存在 none 时,创建两个快速终止的线程与让单个线程执行程序在应用程序的整个生命周期中等待任务是否有意义?
如果您在应用程序中不止一次这样做,ThreadPoolExecutor
绝对值得一看。
一个好处是线程池。这让运行时在每次需要线程时创建和销毁 OS 对象。此外,您可以控制生成的线程数量——但这对您来说似乎不是什么大问题——以及线程 running/done。
但如果您实际上只在应用程序的运行时生成两个线程,则执行程序可能会过大,但它们仍然非常适合使用。
由于 Nathan 添加了 Futures,因此还有 Timer
和 TimerTask
。对于 "Fire and Forget" 类型的后台操作也非常方便 :-)。
使用线程池的一大好处是,您可以避免重复执行某些任务的情况,如果该任务出现问题导致线程挂起,您就有丢失的风险每次任务发生时一个线程,导致 运行 使应用程序脱离线程。如果您的线程在启动时仅 运行 一次,那么风险似乎不适用于您的情况。
您仍然可以使用 Executor,但是一旦您的任务同时拥有这两个 运行,就将其关闭。在原始线程上使用 Futures 或 CompletionService 可能更可取。
在应用程序启动时,我只有两个短期任务要 运行 在后台执行。为每个任务使用一个线程或一个执行器是否有意义,例如,一个单线程执行器来提交这两个任务。
当存在 none 时,创建两个快速终止的线程与让单个线程执行程序在应用程序的整个生命周期中等待任务是否有意义?
如果您在应用程序中不止一次这样做,ThreadPoolExecutor
绝对值得一看。
一个好处是线程池。这让运行时在每次需要线程时创建和销毁 OS 对象。此外,您可以控制生成的线程数量——但这对您来说似乎不是什么大问题——以及线程 running/done。
但如果您实际上只在应用程序的运行时生成两个线程,则执行程序可能会过大,但它们仍然非常适合使用。
由于 Nathan 添加了 Futures,因此还有 Timer
和 TimerTask
。对于 "Fire and Forget" 类型的后台操作也非常方便 :-)。
使用线程池的一大好处是,您可以避免重复执行某些任务的情况,如果该任务出现问题导致线程挂起,您就有丢失的风险每次任务发生时一个线程,导致 运行 使应用程序脱离线程。如果您的线程在启动时仅 运行 一次,那么风险似乎不适用于您的情况。
您仍然可以使用 Executor,但是一旦您的任务同时拥有这两个 运行,就将其关闭。在原始线程上使用 Futures 或 CompletionService 可能更可取。