У меня есть поток демона, который запускается при открытии страницы.Затем поток останавливается, когда страница закрывается.Итак, в моем классе, который содержит поток, я создал его следующим образом:
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
.
![enter image description here](https://i.stack.imgur.com/92fQs.png)