gpt4 book ai didi

java - 什么时候方便使用 Executors.newSingleThreadExecutor() 的例子

转载 作者:搜寻专家 更新时间:2023-10-31 08:12:15 27 4
gpt4 key购买 nike

谁能告诉我一个现实生活中使用这个工厂方法比其他方法更方便的例子吗?

newSingleThreadExecutor

public static ExecutorService newSingleThreadExecutor()

Creates an Executor that uses a single worker thread operating off an unbounded queue. (Note however that if this single thread terminates due to a failure during execution prior to shutdown, a new one will take its place if needed to execute subsequent tasks.) Tasks are guaranteed to execute sequentially, and no more than one task will be active at any given time. Unlike the otherwise equivalent newFixedThreadPool(1) the returned executor is guaranteed not to be reconfigurable to use additional threads.

提前致谢。

最佳答案

Could please somebody tell me a real life example where it's convenient to use [the newSingleThreadExecutor() factory method] rather than others?

我假设您问的是何时使用单线程线程池而不是固定或缓存的线程池。

当我有很多任务要运行但我只希望一个线程来执行时,我会使用单线程执行器。这当然和使用1的固定线程池是一样的。通常这是因为我们不需要它们并行运行,它们是后台任务,我们不想占用过多的系统资源(CPU、内存、IO)。我想将各种任务处理为 CallableRunnable 对象,因此 ExecutorService 是最佳选择,但我只需要一个线程来运行它们.

例如,我有许多 Spring 注入(inject)的计时器任务。我有两种任务,我的“短期”任务在单个线程池中运行。即使我的系统中有几百个,也只有一个线程执行它们。它们执行常规任务,例如检查磁盘空间、清理日志、转储统计信息等。对于时间紧迫的任务,我在缓存线程池中运行。

另一个例子是我们有一系列的合作伙伴集成任务。它们不会花费很长时间,而且它们很少运行,我们不希望它们与其他系统线程竞争,因此它们在单线程执行器中运行。

第三个示例是我们有一个有限状态机,其中每个状态更改器将作业从一种状态转移到另一种状态,并在单个线程池中注册为 Runnable。尽管我们有数百个修改器,但在任何一个时间点只有一个任务有效,因此为任务分配多个线程是没有意义的。

关于java - 什么时候方便使用 Executors.newSingleThreadExecutor() 的例子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16814569/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com