gpt4 book ai didi

java - 执行者取消未决任务 - 需要帮助

转载 作者:行者123 更新时间:2023-11-30 11:25:04 24 4
gpt4 key购买 nike

基本上,我需要一台具有以下功能的机器:

  1. 用于运行任务的固定大小的线程池
  2. 待处理任务队列(已请求,但尚未运行)
  3. 正在取消待处理队列中的任务(任务由 id 标识)
  4. 取消正在进行的任务
  5. 给定任务id,查询任务是Pending还是Running

谁能提出实现这一目标的最佳方法,尤其是第 3-5 项。我真的很感激一些代码示例。

谢谢。

最佳答案

除了任务状态和取消之外的所有内容都是线程池的标准。取消和状态状态可以通过以下方式完成:

enum TaskState {PENDING, RUNNING};

abstract class MyCallable<V> implements Callable<V>{
protected volatile TaskState state = PENDING;

// to make sure state is always set before running the task
protected abstract V doCall();

final V call(){
state = RUNNING;
return doCall();
}

public TaskState getState() { return state; }
}

...

ExecutorService executor = Executors.newFixedThreadPool(4);

Future<V> future = executor.submit(new MyCallable<V>() {
public V doCall() throws Exception {
//... some work ...
if(Thread.interrupted()){
removeFromMap();
return null;
}
}
});

...

future.cancel(true);

要使任务可取消,需要在执行期间检查 Thread.interrupted() 状态或其他一些逻辑 boolean 标志。获得提交任务的 future 后,应调用 future.cancel(true) 以通过中断任务来取消任务。

关于java - 执行者取消未决任务 - 需要帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20465631/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com