2015-10-09 66 views
0

我有一個多線程控制檯應用程序無休止地運行。現在我使用ctrl-c來結束它,但有時它會導致finally塊不被調用,並留下一些進程,即使在主java程序結束之後,原始程序也開始運行。正常結束基於控制檯的多線程程序

我發現這個答案#2

https://stackoverflow.com/a/3194586/492015

class MyThread extends Thread 
{ 
    volatile boolean finished = false; 

    public void stopMe() 
    { 
    finished = true; 
    } 

    public void run() 
    { 
    while (!finished) 
    { 
     //do dirty work 
    } 
    } 
} 

但由於我的程序是基於控制檯,怎麼會變成這樣申請嗎?我需要讓程序等待鍵盤輸入?所以如果我按'q'例如stopMe()會被調用。我將如何做到這一點?

+0

當q按下時,等待控制檯輸入的過程如何設置爲true? – Breeze

+0

看看這個問題http://stackoverflow.com/q/1611931/1521049 – Thomas

回答

1

如果你想進行清理,你可以註冊一個關閉掛鉤:

Runtime.getRuntime().addShutdownHook(new Thread() { 
    @Override 
    public void run() { 
     // do the cleanup 
    } 
}); 

根據我的經驗,當按下Ctrl + C鍵它總是執行。