2014-02-10 79 views
1

我是Java中的多線程新手,所以對於這個問題012zz有沒有什麼辦法喚醒睡眠線程,通過調用睡眠(超時)方法睡眠,並且在那之前超時到期?例如把他吵醒了一些事件使用睡眠方法喚醒Java中的線程

謝謝

我已經試過這個代碼處理我的事件手動睡眠/喚醒線程,但它不工作:線程睡眠,但不能恢復

   try { 
      if(sleepMyThread){ 

      myThread.sleep(100000); 
      sleepMyThread = false; 
       } 
      else{ 
      myThread.interrupt(); 
      sleepMyThread = true; 
       } 
      } 
    catch (InterruptedException e) { 
      e.printStackTrace(); 
    } 
+0

這看起來類似於您的問題:http://stackoverflow.com/questions/8708473/waking-up-a-sleeping-thread-interrupt-versus-splitting-the-sleep -into-mult – BitNinja

+1

@codeNinja - 它的確如此,但是>>這個<<問題表達的問題沒有OP的可疑代碼和生活故事的兩個屏幕截圖:-) –

回答

2

仔細閱讀sleep方法的文檔。它明確指出 - 方法拋出InterruptedException。因此,您可以通過中斷該線程來喚醒睡眠線程。但是,這不是將事件發送到線程的方式。對於發送事件(好的...不是基於事件的機制在覈心Java中可用),您應該使用wait - notify機制。

+0

你的意思是調用方法中斷從睡眠方法喚醒線程? – user3232174

+0

什麼辦法,我已經試過這種 – user3232174

+0

嘗試{ \t \t \t \t \t如果(sleepMyThread){ \t \t \t \t \t \t \t \t \t \t \t \t \t myThread.sleep(100000); \t \t \t \t \t \t \t sleepMyThread = false; \t \t \t \t \t} \t \t \t \t \t其他{ \t \t \t \t \t \t MyThread的。打斷(); \t \t \t \t \t \t sleepMyThread = true; \t \t \t \t} \t \t \t \t} \t \t \t \t趕上(InterruptedException的發送){ \t \t \t \t \t \t \t \t \t \t \t \t e.printStackTrace(); \t \t \t \t} – user3232174

0

在您的線程中調用interrupt()方法。它會拋出一個InterruptedException所以確保你處理。