gpt4 book ai didi

java - 使用 Executor 和 Runnable 一起在一段时间后杀死线程

转载 作者:行者123 更新时间:2023-12-01 13:21:38 24 4
gpt4 key购买 nike

我碰巧看到这篇文章,内容是在使用执行器服务一段时间后杀死一个线程:Killing thread after some specified time limit in Java

这是文章中提到的代码:

ExecutorService executor = Executors.newSingleThreadExecutor();
executor.invokeAll(Arrays.asList(new Task()), 10, TimeUnit.MINUTES); // Timeout of 10 minutes.
executor.shutdown();

现在我的程序中有一个可运行的线程要执行。使用上述代码一段时间后如何终止该线程?

这是我用于创建线程的代码的一部分:

public static List<Thread> thread_starter(List<Thread> threads,String filename)
{ String text=read_from_temp(filename);
Runnable task = new MyRunnable(text);
Thread worker = new Thread(task);
worker.start();
// Remember the thread for later usage
threads.add(worker);
return threads;
}

public class MyRunnable implements Runnable {
MyRunnable(String text)
{
this.text=text;
}
@Override
public void run() {
/* other computation*/
}

我通过调用thread_started()函数创建多个线程。

任何人都可以帮我将执行器服务与它结合起来吗?我尝试了很多,但找不到任何出路!

最佳答案

在java中,你不能直接杀死一个正在运行的线程。如果你想杀死正在运行的线程,你需要在你的任务中设置一个正在运行的标志,在线程任务中检查它,然后在外面设置它。例如:

   MyRunnable task = ....;
......
task.running = false; //stop one task


public class MyRunnable implements Runnable {
public boolean running = true;
public void run() {
while(running){
.....
}
}

您提到的“ExecutorService”是单线程“ExecutorService”,它会一个接一个地执行任务,它对超时所做的只是等待任务完成并计算/比较每个任务的时间与超时。您可以在java的源代码“AbstractExecutorService.java”中找到它。

关于java - 使用 Executor 和 Runnable 一起在一段时间后杀死线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21979639/

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