1. 程式人生 > 實用技巧 >354.俄羅斯套娃信封問題

354.俄羅斯套娃信封問題

執行緒通訊:交錯列印

涉及到的方法:

notify();
wait();

必須是同步程式碼塊,或者同步方法才可以使用

class number implements Runnable{
    private int num=1;
    @Override
    public void run() {
        while (true){
            synchronized (this){
                notify();  //notify方法 /notifyAll方法
                if (num<=100){
                    
try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName()+":"+num); num++; try { wait();
//wait方法 } catch (InterruptedException e) { e.printStackTrace(); } }else { break; } } } } }

wait:一旦執行此方法,當前執行緒就會進入阻塞狀態,並釋放同步監視器

notify:一旦執行此方法,就會喚醒被wait的一個執行緒,如果多個執行緒被wait,就喚醒優先順序高的

notifyAll:一旦執行此方法,就會喚醒所有被wait的執行緒

sleep與wait的不同:1.兩個方法宣告的位置不同:Thread類中宣告sleep,object類中宣告wait

2.呼叫的要求不同:sleep可以在任何需要的場景下呼叫,wait只能在同步程式碼塊護著同步方法中

3.關於是否釋放同步監視器:如果兩個方法都使用在同步程式碼塊或者同步方法中,sleep不釋放同步監視器