ScheduledThreadPoolExecutor可以同时执行多个任务吗?

Tim*_*ime 6 java scheduled-tasks

文档ScheduledThreadPoolExecutor说 - 按照先进先出(FIFO)提交顺序启用任务计划完全相同的执行时间.

这是否意味着应该同时完成的任务永远不会同时完成.相反,它们是按FIFO顺序执行的?

如果这是真的,那么我使用哪个类比哪个类更好Timer,也没有这个FIFO问题?

Tay*_*lor 5

ScheduledThreadPoolExecutor 的工作方式是有一个“调度”或主线程来检查要执行的任务。

如果它找到一个任务,它会将它委派给池中的一个“工作”线程。

如果多个任务准备好执行,它们一次被“启动”一个,但一旦“启动”,后续处理是并发的,根据 Java 的定义。

如果您有两个同时通过执行程序安排的任务,则它们完成的顺序可能因运行而异,除非您放入特定的控件(例如锁定、等待等)来处理此问题,这取决于 java 的线程调度(java 如何为内核上的线程分配时间)来确定如何以及何时处理什么。请注意,设置此类锁、等待等......是一项看似复杂的任务,容易出现竞争条件,导致意外死锁、活锁等......