我有一个守护程序线程,它在打开页面时启动。当页面关闭时,线程停止。所以,在我的课持有线程,我有这样的创建:如何停止运行多个实例的同一线程
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会不会更高效? –