CURD及MyBatis配置檔案
阿新 • • 發佈:2022-03-06
執行緒通訊
wait(),notify(), notifyALL()方法
/* * 執行緒通訊例子:使用兩個執行緒列印1-100,執行緒1和執行緒2交替列印 * 涉及到的三個方法: wait():一旦執行此方法,當前執行緒就進入阻塞狀態,並釋放同步監視器。 notify():一旦執行此方法,就會喚醒被wait的一個執行緒。如果有多個執行緒被wait, 就喚醒優先順序高的 notifyAll):一旦執行此方法,就會喚醒所有被wait的執行緒。 * 說明:1. wait(),notify(), notifyALL()三個方法必須使用在同步程式碼塊或同步方法中。 * 2. wait(), notify(), notifyAll()三個方法的呼叫者必須是同步程式碼塊或同步方法中的同步監視 否則,會出現ILlegaLMonitorStateException異常 3. wait(), notify(), notifyALL()三個方法是定義在java. lang. object類中。 * */ class Number implements Runnable { private int num = 1; @Override public void run() { while(true){ synchronized(this){ //呼叫notify()方法從阻塞執行緒中喚醒一個 this.notify(); if (num <= 100){ System.out.println(Thread.currentThread().getName()+":"+num); num++; }else{ break; } //呼叫wait()方法使當前執行緒阻塞 try { this.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } } } } 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("執行緒1"); t2.setName("執行緒2"); t1.start(); t2.start(); } }