這個問題是導致它的幾個問題的頂點。我只是想確保在我做出任何更改之前,我擁有了一切。添加線程中斷執行run()
因此,這裏就是我的工作對數據結構:
在一個抽象類:
public abstract void doRun();
public void run(){
try{
while(!Thread.currentThread().isInterrupted() || hasRunBefore){
doRun();
}
}catch (InterruptedException e){Thread.sleep(1); System.out.println("Thread Interrupted: "); e.printStackTrace(); }
}
然後在子類中正在實施我的抽象類:
public void doRun(){
doChildClassStuff();
}
然後,當我在我的主類中調用這些時,我只需做
ClassName myClass = new ClassName(constructor.list);
ExecutorService threadPool = Executors.newFixedThreadPool(12);
List<Future<?>> taskList = new ArrayList<Future<?>>();
taskList.add(myClass);
for(Future future : taskList){
try{
future.get(1, TimeUnit.SECONDS);
}catch(CancellationException cx){ System.err.println("Cancellation Exception: "); cx.printStackTrace();
}catch(ExecutionException ex){ System.err.println("Execution Exception: ");ex.printStackTrace();
}catch(InterruptedException ix){ System.err.println("Interrupted Exception: ");ix.printStackTrace();
}catch(TimeoutException ex) {future.cancel(true);}
}
threadPool.shutdown();
threadPool.awaitTermination(60, TimeUnit.SECONDS);
threadPool.shutdownNow();
如果thread.sleep()失敗,則表示該線程已被中斷並應退出。如果所有的線程超過60秒,那麼他們都會從awaitTermination發送thread.interrupt()命令,對吧?
我完全脫離了這裏嗎?
是否真的沒有辦法讓我可以實現一個監聽器的父?有大約50班,我將不得不手工修改,這將意味着提交的TON –
不幸的是,沒有@ Damien.Bell。基類沒有辦法「偵聽」線程中斷。 – Gray
廢話,好吧......這也在我的子類中提出了另一個問題,它們不是循環運行的,它們本質上是簡單的語句,每個語句都執行一些可運行的方法。 –