请有人告诉我一个现实生活中的例子,使用[newSingleThreadExecutor()
工厂方法]而不是其他方法更方便?
我假设您询问何时使用单线程线程池而不是固定或缓存线程池。
当我有许多任务要运行但我只想要一个线程来执行它时,我使用单线程执行器。这当然和使用 1 的固定线程池是一样的。这通常是因为我们不需要它们并行运行,它们是后台任务,我们不想占用太多系统资源(CPU、内存、IO)。Callable
我想以对象或Runnable
对象的形式处理各种任务,所以这ExecutorService
是最佳的,但我只需要一个线程来运行它们。
例如,我有许多我弹簧注入的计时器任务。我有两种任务,我的“短期”任务在单个线程池中运行。即使我的系统中有几百个线程,也只有一个线程可以执行它们。他们执行日常任务,例如检查磁盘空间、清理日志、转储统计信息等。对于时间紧迫的任务,我在缓存线程池中运行。
另一个例子是我们有一系列合作伙伴集成任务。它们不需要很长时间,而且运行频率很低,我们不希望它们与其他系统线程竞争,因此它们在单线程执行器中运行。
第三个例子是我们有一个有限状态机,其中每个状态修改器将作业从一个状态转移到另一个状态,并Runnable
在单个线程池中注册为 a。尽管我们有数百个 mutator,但在任何一个时间点只有一个任务是有效的,因此为该任务分配多个线程是没有意义的。