使用Executor&一段时间后可以一起运行以杀死线程

时间:2014-02-24 05:34:06

标签: java multithreading runnable executorservice

我碰巧遇到过这篇文章,因为在使用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与它结合起来。我尝试了很多,但找不到任何出路!

1 个答案:

答案 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'中找到它。