2012-02-01 165 views
0

我有一個場景,我有一個線程在等待和執行任務之間循環。但是,我想中斷等待線程(如果您願意,可以跳過等待的其餘部分)並繼續執行任務。讓等待線程跳過剩下的等待/繼續

任何人有任何想法如何做到這一點?

+0

您是否在等待超時?或者你在等待並通知? – Guillaume 2012-02-01 16:09:20

+0

我正在使用等待超時。 – HansiHE 2012-02-01 16:11:03

+0

代碼示例將有所幫助 – 2012-02-01 16:12:43

回答

0

這是了Thread.interrupt什麼:

import java.util.Date; 


public class Test { 

    public static void main(String [] args) { 
     Thread t1 = new Thread(){ 
      public void run(){ 
       System.out.println(new Date()); 
       try { 
        Thread.sleep(10000); // sleep for 10 seconds. 
       } catch (InterruptedException e) { 
        System.out.println("Sleep interrupted"); 
       } 
       System.out.println(new Date()); 
      } 
     }; 

     t1.start(); 
     try { 
      Thread.sleep(2000); // sleep for 2 seconds. 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 
     t1.interrupt(); 
    } 
} 

線程T1將只能睡2秒,因爲主線程中斷了。請記住,這會中斷許多阻塞操作,如IO。

+2

是的。 Thread.interrupt()將中斷wait()(所有變體),sleep()以及所有阻塞IO。當你想放棄任何線程正在做的事情時,通常會使用中斷。但是,如果您想等待某些事情發生,則應該使用wait()/ notify()。在Java教程中閱讀它們。 – pron 2012-02-01 16:23:07

1

你可以使用wait()notify()。如果您的線程正在等待,您需要通過從另一個線程呼叫notify()來恢復它。