我碰巧遇到过这篇文章,因为在使用Executor服务一段时间后杀死了一个帖子: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()函数来创建多个线程。
任何人都可以帮助我将Executor Service与它结合起来。我尝试了很多,但找不到任何出路!
答案 0 :(得分:1)
在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'中找到它。