Timer 创建自己的线程,而 ScheduledThreadPoolExecutor
使用池。它们是否是一种指定直接执行任务而无需编码任何代码的线程的方法?如果这是一个坏主意,请解释原因(除了线程繁忙之外)。
我对循环处理程序方法没有任何问题,我只是好奇。
最佳答案
您可以使用 Executors.newSingleThreadScheduledExecutor()
创建一个具有单个线程的 ScheduledThreadPoolExecutor
。
如果您想对这个单个线程有更多的控制,您可以选择传递ThreadFactory
作为参数。每当执行器想要一个新的 Thread
实例来运行给定的 Runnable
(这与传递给执行器的 execute(...)
、submit(...)
或 schedule(...)
方法的 Runnable
不同)时,就会调用线程工厂的 newThread(Runnable)
方法。
请注意,您无法重用现有线程,因为通常无法将代码“注入(inject)”到已运行的线程中,而这在 Qt 中是可能的。 。在那里,每个线程都有自己的事件队列和计时工具,因此您可以自由决定哪个(已经存在的)线程应该处理您的定时任务(请参阅 Timers in Qt )。
Java 中没有这样的现成功能。
关于java - 如何在不使用循环器和处理程序的情况下在特定线程中调度任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29400140/