【发布时间】:2021-12-28 00:46:48
【问题描述】:
我有一个会一直被调用的方法。
调用后会生成一个job(runnable)并提交给线程池。每个作业的超时时间不同,具体取决于传入的参数。
现在我想监控每个作业是否可以在它开始执行时的超时时间内结束。我该怎么办?
注意timeout是从执行开始到执行结束,而不是从交付到线程池的时间到任务执行结束。正因为如此,我觉得future #get (timeout)不能用了,对吧?
并且acceptJob不应该阻塞,它必须在提交作业后立即返回(可能是其他一些逻辑,但不是阻塞)。
ExecutorService pool = Executors.newFixedThreadPool(10);
public void acceptNewJob(Map<String, Object> params) {
// timeout from params
int timeoutInMs = (int) params.get("timeoutInMs");
pool.submit(new Runnable() {
@Override
public void run() {
// generate a job by params
// if this job execute timeout, need alarm
}
});
}
【问题讨论】:
标签: java multithreading concurrency