判斷子序列
阿新 • • 發佈:2020-07-27
執行緒通訊三個方法
* wait();//一旦執行此方法,當前執行緒就進入阻塞狀態,並釋放同步監視器
* notify();//一旦執行此方法,就會喚醒被wait的一個執行緒,如果有多個執行緒被wait,就會喚醒優先順序較高的
* notifyAll();//一旦執行此方法,就會喚醒被wait的所有執行緒
*
* 注意
* 1.wait\notify\notifyAll只能出現在同步程式碼塊或者同步方法中
* 2.wait\notify\notifyAll的呼叫者必須是同步程式碼塊或同步方法中的同步監視器
/** * * 執行緒通訊的例子,使兩個執行緒列印1-100,執行緒1,執行緒2交替列印 * 執行緒通訊三個方法 * wait();//一旦執行此方法,當前執行緒就進入阻塞狀態,並釋放同步監視器 * notify();//一旦執行此方法,就會喚醒被wait的一個執行緒,如果有多個執行緒被wait,就會喚醒優先順序較高的 * notifyAll();//一旦執行此方法,就會喚醒被wait的所有執行緒 * * 注意 * 1.wait\notify\notifyAll只能出現在同步程式碼塊或者同步方法中 * 2.wait\notify\notifyAll的呼叫者必須是同步程式碼塊或同步方法中的同步監視器 * * * *@author orz */ public class CommunicationTest { public static void main(String[] args) { Number number = new Number(); Thread t1=new Thread(number); Thread t2=new Thread(number); t1.setName("執行緒一"); t2.setName("執行緒二"); t1.start(); t2.start(); } }class Number implements Runnable { private int number=1; @Override public void run() { while (true) { synchronized (this) { //喚醒一個執行緒 notify(); if (number<=100) { System.out.println(Thread.currentThread().getName()+":"+number); number++; try { //使得執行緒進入阻塞狀態,釋放鎖 wait(); } catch (InterruptedException e) { e.printStackTrace(); } } else { break; } } } } }