我的代碼:睡眠中的線程如何接收事件?
public class EventHandler implements Runnable, SomeEventListener {
private static final EventHandler INSTANCE = new EventHandler();
private static final Thread THREAD = new Thread(INSTANCE);
private static volatile boolean isRunning = false;
private EventHandler() {}
private static EventHandler getInstance() {
return INSTANCE;
}
public void start() {
isRunning = true;
THREAD.start();
}
public void stop() {
isRunning = false;
}
//Listener method that was overriden
public void onEvent(Event event) {
//...do stuff
}
@Override
public void run() {
//Do nothing, let the listener do its job
while (isRunning) {
try {
logger.info("Sleeping...");
Thread.sleep(5000);
logger.info("Done sleeping...");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
} 基本上run()
方法不做任何事 - 只是睡覺每5秒鐘,醒來,睡去了。我不明白的是當它睡着的時候,這個EventHandler
類仍然會得到事件。這是如何發生的?自線程睡着以後,班級不應該停止接收事件嗎?
那麼你是說EventHandler類有兩個線程?一個專用於EventHandler本身,另一個專用於運行方法? – mpmp
@Miguel:它被其他線程調用。就像你從另一個線程調用stop一樣。 –
@MiguelPortugal,類沒有線程。類是定義數據佈局的結構,並定義對數據進行操作的方法。 「線程」是Java中那些_executes_方法的名稱。程序中的某個線程執行EventHandler的'start()'方法:這會創建一個_new_線程來執行run()方法。與此同時,一些_other_線程(可能與調用start()的線程相同,也許不會。)如果沒有看到更多的代碼,可以自由地調用onEvent()。 –