gpt4 book ai didi

java - ScheduledExecutorService 一线程多任务

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:03:17 24 4
gpt4 key购买 nike

我是 ExecutorService 的新手,想知道为什么以下代码可以正确打印“10 15”,即使我只创建了一个线程来处理超时?为什么我可以多次调用 schedule 而不会在单个线程执行器上取消先前的任务?

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;


public class TestExecutorService implements Runnable {
public static ScheduledExecutorService SERVICE = Executors.newSingleThreadScheduledExecutor();
private int delay;


public TestExecutorService(int delay) {
this.delay = delay;
}

public void run () {
System.out.println(delay);
}

public static void main (String[] args) {
SERVICE.schedule(new TestExecutorService(10), 10, TimeUnit.SECONDS);
SERVICE.schedule(new TestExecutorService(15), 15, TimeUnit.SECONDS);

SERVICE.shutdown();
}
}

最佳答案

来自Javadocs :

Tasks are guaranteed to execute sequentially, and no more than one task will be active at any given time.

“处理超时”和“任务执行”的区别是答案的关键。你假设“单线程”意味着“一次只处理一个超时”,但它实际上意味着“一次只执行一个任务”。所有的超时是同时处理的,但是如果一个任务在停止执行之前达到了一个超时,则它必须等待另一个超时才能执行。

关于java - ScheduledExecutorService 一线程多任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13927816/

24 4 0
文章推荐: java - 如何使用 JAXB 将 JAXBElement 编码到 Java 中的 org.w3c.dom.Element