2014-02-24 51 views
0

我碰巧遇到這篇文章中使用的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()函數的多個線程。

任何人都可以請幫我把執行器服務與它結合起來。我嘗試了很多,但找不到任何出路!

+0

可能你應該看看這個答案... http://stackoverflow.com/a/15900500/614868 – Venky

回答

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」,它會Exec的任務一個接一個,它超時做的只是等待完成的任務,並計算/每項任務的時間,超時比較。你可以在java的源代碼'AbstractExecutorService.java'中找到它。