Rol*_*all 5 java multithreading pooling
可以请有人告诉我一个真实的例子,哪个方便使用这种工厂方法而不是其他方法?
newSingleThreadExecutor
public static ExecutorService newSingleThreadExecutor()
创建一个Executor,它使用一个在无界队列中运行的工作线程.(但请注意,如果此单个线程由于在关闭之前执行期间的故障而终止,则在需要执行后续任务时将使用新的线程.)保证任务按顺序执行,并且不会有多个任务处于活动状态在任何给定的时间.与其他等效的newFixedThreadPool(1)不同,保证返回的执行程序不可重新配置以使用其他线程.
提前致谢.
Gra*_*ray 13
可以请有人告诉我一个真实的例子,使用[
newSingleThreadExecutor()工厂方法]而不是其他方便吗?
我假设您询问何时使用单线程线程池而不是固定或缓存线程池.
当我有许多任务要运行时,我使用单线程执行程序,但我只想要一个线程来执行它.这与使用1的固定线程池相同.通常这是因为我们不需要它们并行运行,它们是后台任务,我们不想占用太多系统资源(CPU,内存,IO).我想处理各种任务Callable或Runnable对象,所以ExecutorService我是最优的,但我只需要一个线程来运行它们.
例如,我有春天注入的一些计时器任务.我有两种任务,我的"短期"任务在一个线程池中运行.只有一个线程可以执行它们,即使我的系统中有几百个.它们执行常规任务,例如检查磁盘空间,清理日志,转储统计信息等.对于时间紧迫的任务,我在缓存的线程池中运行.
另一个例子是我们有一系列合作伙伴集成任务.它们不需要很长时间,并且它们很少运行,我们不希望它们与其他系统线程竞争,因此它们运行在单个线程执行器中.
第三个例子是我们有一个有限状态机,其中每个状态mutators将作业从一个状态转移到另一个状态,并Runnable在一个线程池中注册为一个状态.即使我们有数百个mutator,但在任何一个时间点只有一个任务是有效的,因此为任务分配多个线程是没有意义的.