如何在不使用活套和处理程序的情况下在特定线程中调度任务



Timer创建自己的线程,ScheduledThreadPoolExecutor使用池。它们是否可以指定直接执行任务的线程,而不必封送任何代码?如果这是个坏主意,请解释原因(在线程繁忙的情况下)。

我对looper处理程序的方法没有问题,我只是好奇。

您可以使用Executors.newSingleThreadScheduledExecutor()创建一个带有单个线程的ScheduledThreadPoolExecutor

如果您想对这个单独的线程有更多的控制权,您可以选择传递一个ThreadFactory作为参数。每当执行器想要有一个新的Thread实例来运行给定的Runnable(这与传递给执行器的execute(...)submit(...)schedule(...)方法的Runnable不同)时,就会调用线程工厂的newThread(Runnable)方法。

请注意,您无法重用现有线程,因为通常无法将代码"注入"到已经运行的线程中,这在Qt中是可能的。在那里,每个线程都有自己的事件队列和定时工具,因此您可以自由决定哪个(已经存在的)线程应该处理您的定时任务(请参阅Qt中的Timers)。

Java中没有现成的此类功能。

最新更新