java - 如何在不使用循环器和处理程序的情况下在特定线程中调度任务?

标签 java android multithreading

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/

相关文章:

java - Mockito 模拟一个具有不相关静态方法的类

android - onLayoutChange() 调用次数过多

c++ - 为什么此线程池死锁或运行太多次?

java - 从智能卡读取私钥以对XML文档进行数字签名

java - 无法在我的系统中配置 Struts

java - 如何将 Java 中的表观类型更改为真实类型?

android - Xamarin #如果 Android 不工作

java - 在执行 Maven 构建或打包时从最终 jar 中删除记录器行

java - 什么时候应该将方法声明为同步?

java - 在循环中使用线程,如何在到达主程序末尾之前完成for循环?