我有一個守護程序線程,它在打開頁面時啓動。當頁面關閉時,線程停止。所以,在我的課持有線程,我有這樣的創建:如何停止運行多個實例的同一線程
class A {
private static volatile boolean isStopped=false;
//this method is called then the page is loaded
public void testListener() {
Thread listener = new Thread(new Runnable() {
public void run() {
while(!isStopped) {
//perform listener event
try {
//after every event sleep for a while
Thread.sleep(1000 *2)
} catch(InterruptedException e){}
}
}
});
}
listener.setName("Test-Server-Daemon");
listener.setDaemon(true);
listener.start();
// reset back to false so thread can be restarted when the page load event,
// call this method instance
if (isStopped) {
isStopped=false;
}
}
/**This is called when page is closed**/
public static void stopListener() {
isStopped=true;
}
}
經過調查,我注意到,當頁面內關閉,而不是再次打開說30秒的間隔,線程正常停止。
但是,當頁面關閉並在2秒鐘的時間間隔內重新打開時,舊線程不會停止,因此會與新線程同時運行。
所以你可以從下面看到圖片,當我關閉並快速打開頁面時,我再次啓動了相同的線程。
有誰知道如何防止這種情況發生?
我已經嘗試使用線程interrupt
在哪裏我重置互斥鎖,但沒有喜悅。
編輯:
isStopped是volatile
。
嘗試呼叫'了Thread.interrupt()'方法。 – Salw
我已經嘗試過了 - 在我的問題中也提到了它。 – Bitmap
'執行監聽事件'是做什麼的?它是否以某種方式檢查事件對象的存在?如果是這樣,使用wait/notify會不會更高效? –