1. 程式人生 > 其它 >CURD及MyBatis配置檔案

CURD及MyBatis配置檔案

執行緒通訊

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();
    }
}