gpt4 book ai didi

java - 停止java.util.concurrent.Executor任务的方法

转载 作者:行者123 更新时间:2023-12-01 22:35:07 25 4
gpt4 key购买 nike

我想知道是否有任何方法可以优雅地停止 java.util.concurrent.Executor 任务,或者我们应该使用 java.util.concurrent.ExecutorService,它是 java.util.concurrent.Executor 之上的一层(java.util.concurrent.Executor)。 util.concurrent.ExecutorService 有用于关闭的 API)?

package com.example;

import java.util.concurrent.Executor;
import java.util.concurrent.Executors;

public class ExecutorTaskExample {

public static void main(String[] args) {
Executor executor = Executors.newFixedThreadPool(5);

for(int i=0; i<10; i++){
ThreadTask task = new ThreadTask();
task.setTaskName("task_"+i);
executor.execute(task);
}
System.out.println("Program Completed");
}

}

class ThreadTask implements Runnable{
private String taskName;

@Override
public void run(){
System.out.println("Task: "+this.getTaskName()+"processed by "+Thread.currentThread().getName());
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}

public String getTaskName() {
return taskName;
}

public void setTaskName(String taskName) {
this.taskName = taskName;
}

}

最佳答案

Java 中没有“优雅”的方式从外部停止线程。

您需要让代码不时检查“shouldStop”标志并自行退出。

无论您使用什么 API,这都没有什么不同(除了一个我不会链接到的已严重弃用的 Thread 方法)。

ExecutorService#shutdown不会对当前正在运行的任务做任何事情。如果还有的话,它甚至会继续启动排队的任务。它将停止接受新的。

ExecutorService#shutdownNow会更激进一些,因为它将 interrupt() 发送到正在运行的线程(但仍然取决于正在运行的应用程序代码如何处理)。

FWIW,你的 Thread#sleep 会这样被中断。

关于java - 停止java.util.concurrent.Executor任务的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26986783/

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