sleep、wait、notify 簡例一

package synchronize;apache

import com.sun.org.apache.bcel.internal.generic.NEW;ide

public class SleepNotifyWait {.net

    public static void main(String[]args){
        final Object object=new Object();
        Thread t1=new Thread(new Runnable() {
            @Override
            public void run() {
                synchronized (object) {
                    System.out.println(1);
                    try {
                        object.wait();
//在其餘線程調用此對象的 notify() 方法或 notifyAll() 方法前,致使當前線程等待。換句話說,此方法的行爲就好像它僅執行 wait(0) 調用同樣。 
//當前線程必須擁有此對象監視器。該線程發佈對此監視器的全部權並等待,直到其餘線程經過調用 notify方法,或 notifyAll 方法通知在此對象的監視器上等待的線程醒來。
//而後該線程將等到從新得到對監視器的全部權後才能繼續執行。線程

                    } catch (Exception e) {
                    }
                    System.out.println(2);
                }
            }
        });
        Thread t2=new Thread(new Runnable() {
            @Override
            public void run() {
                synchronized (object) {
                    System.out.println(3);
                    try {
                        object.notify();
/*喚醒在此對象監視器上等待的單個線程。若是全部線程都在此對象上等待,則會選擇喚醒其中一個線程。選擇是任意性的,並在對實現作出決定時發生。
 * 線程經過調用其中一個 wait 方法,在對象的監視器上等待。 
直到當前線程放棄此對象上的鎖定,才能繼續執行被喚醒的線程。被喚醒的線程將以常規方式與在該對象上主動同步的其餘全部線程進行競爭;
例如,喚醒的線程在做爲鎖定此對象的下一個線程方面沒有可靠的特權或劣勢。 
*/
                        Thread.sleep(1000);
                    } catch (Exception e) {
                    }
                    System.out.println(4);
                }
            }
        });
        t1.start();
        t2.start();
        
    }
}
 對象

相關文章
相關標籤/搜索