【发布时间】:2016-05-21 10:30:15
【问题描述】:
在应用程序启动时,我只有两个短期任务要在后台运行。为每个任务或执行器使用一个线程是否有意义,例如,单个线程执行器来提交这两个任务。
创建两个快速死亡的线程,而不是让一个线程执行器在应用程序的整个生命周期中等待没有任务的任务是否有意义?
【问题讨论】:
标签: java multithreading executorservice java-threads
在应用程序启动时,我只有两个短期任务要在后台运行。为每个任务或执行器使用一个线程是否有意义,例如,单个线程执行器来提交这两个任务。
创建两个快速死亡的线程,而不是让一个线程执行器在应用程序的整个生命周期中等待没有任务的任务是否有意义?
【问题讨论】:
标签: java multithreading executorservice java-threads
使用线程池的一大好处是,您可以避免重复执行某些任务的情况,如果该任务出现问题导致线程挂起,您就有丢失线程的风险每次任务发生时,都会导致应用程序在线程之外运行。如果您的线程仅在启动时运行一次,那么风险似乎不适用于您的情况。
您仍然可以使用 Executor,但在您的两个任务都运行后将其关闭。在原始线程上使用 Futures 或 CompletionService 可能更可取。
【讨论】:
如果您在应用程序中多次这样做,ThreadPoolExecutor 绝对值得一看。
一个好处是线程池。每次您需要线程时,这都会让运行时创建和销毁 OS 对象。此外,您可以控制产生的线程数量 - 但这对您来说似乎不是大问题 - 以及正在运行/完成的线程。
但是,如果您实际上只在应用程序的运行时生成两个线程,则执行器可能会过大,但它们仍然非常适合使用。
由于 Nathan 添加了 Futures,所以还有 Timer 和 TimerTask。对于“一劳永逸”类型的背景动作也非常方便:-)。
【讨论】: