Timer创建自己的线程,ScheduledThreadPoolExecutor
使用池。它们是否可以指定直接执行任务的线程,而不必封送任何代码?如果这是个坏主意,请解释原因(在线程繁忙的情况下)。
我对looper处理程序的方法没有问题,我只是好奇。
您可以使用Executors.newSingleThreadScheduledExecutor()
创建一个带有单个线程的ScheduledThreadPoolExecutor
。
如果您想对这个单独的线程有更多的控制权,您可以选择传递一个ThreadFactory
作为参数。每当执行器想要有一个新的Thread
实例来运行给定的Runnable
(这与传递给执行器的execute(...)
、submit(...)
或schedule(...)
方法的Runnable
不同)时,就会调用线程工厂的newThread(Runnable)
方法。
请注意,您无法重用现有线程,因为通常无法将代码"注入"到已经运行的线程中,这在Qt中是可能的。在那里,每个线程都有自己的事件队列和定时工具,因此您可以自由决定哪个(已经存在的)线程应该处理您的定时任务(请参阅Qt中的Timers)。
Java中没有现成的此类功能。