關於個人微信公眾開發之微信分享
阿新 • • 發佈:2020-11-04
執行緒通訊:交錯列印
涉及到的方法:
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不釋放同步監視器