<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Ordinary hut

    人間一福地,勝似天仙宮
    posts - 61, comments - 50, trackbacks - 0, articles - 1

    Notify和Wait的簡單理解

    Posted on 2013-04-27 15:23 landor 閱讀(356) 評論(0)  編輯  收藏 所屬分類: java
    java中wait和notify的簡單理解
    1 它們都是Object的屬性;
    2 wait:釋放對象鎖;由于把鎖釋放了,當前線程就會卡住,繼續再等待獲取鎖的機會(也許是干了一半的活后,就把活交出去了,然后等待繼續干活的機會);
    3 notify:告訴其中一個等待的線程(具體哪一個不知道),我已經用完這個對象,你可以繼續用了
    4 它們都要包含在synchronized塊里,只有先鎖住這個對象,才能進行wait、notify操作;

    例子:
    1 定義一個普通對象
    public class MyObj {
        public String name;
    }
    2 主線程類,定義MyObj對象,new兩個線程
    public class TestMain {

        public static MyObj obj = new MyObj();
        
        /**
         * 
    @param args
         
    */
        public static void main(String[] args) throws Throwable {
            new TestMain().myTest();
        }
        
        public void myTest() throws Throwable{
            Test1 test1 = new Test1();
            Test2 test2 = new Test2();
            
            Thread t1 = new Thread(test1); 
            Thread t2 = new Thread(test2); 
            
            t1.start();
            Thread.sleep(1000);//啟動線程1,然后主線程睡眠1秒鐘,再啟動2
            t2.start();
            
        }

    }
    3 定義線程1,:
    public class Test1 implements Runnable{

        @Override
        public void run() {
            synchronized (TestMain.obj) {//占有對象鎖
                try {
                    TestMain.obj.name="1";
                    System.out.println(TestMain.obj.name); //打印出1
                    TestMain.obj.wait();  //釋放對TestMain.obj對象的鎖,同時當前線程立即卡住,陷入等待
                    System.out.println(TestMain.obj.name);//只有線程再次搶到TestMain.obj的鎖后,才會運行
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }

    }
    4 線程2:
    public class Test2 implements Runnable{

        @Override
        public void run() {
            
            synchronized (TestMain.obj) { //當線程1釋放這個對象的鎖時,本線程立即得到
                TestMain.obj.name = "2"; //改值
                TestMain.obj.notify();//通知占用了TestMain.obj且當前是等待的線程(線程1)可以繼續,但是必須等到本synchronized塊執行完畢。
                TestMain.obj.name = "3";
                TestMain.obj.name = "4";
                
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                TestMain.obj.name = "7";//執行完畢,此時線程1被喚醒,會打印出7
            }
        }

    }
    結果顯示1和7


    主站蜘蛛池模板: 日产乱码一卡二卡三免费| 国内精品免费麻豆网站91麻豆| 亚洲真人日本在线| 亚洲heyzo专区无码综合| 18禁无遮挡无码网站免费| 日韩亚洲国产综合久久久| 久久久久亚洲精品成人网小说| 国产免费区在线观看十分钟| 免费下载成人电影| 亚洲精品无码专区在线在线播放| 一级人做人a爰免费视频 | 亚洲 暴爽 AV人人爽日日碰| 在线观看免费人成视频| 亚洲日韩精品无码专区加勒比☆| 卡1卡2卡3卡4卡5免费视频| 亚洲国产精品无码av| 亚洲中文字幕一二三四区| 久久爰www免费人成| 亚洲精品国产啊女成拍色拍| 99国产精品永久免费视频| 日本亚洲免费无线码| 日本免费人成视频播放| 日本一区二区在线免费观看| 无码国产精品一区二区免费| 亚洲色成人四虎在线观看| 国产大片91精品免费看3| 亚洲不卡影院午夜在线观看| 免费无码成人AV片在线在线播放| 久久水蜜桃亚洲AV无码精品| 国产乱码免费卡1卡二卡3卡| 噜噜综合亚洲AV中文无码| 亚洲天堂中文字幕在线| 91大神免费观看| 亚洲精品无码成人片久久不卡 | 亚洲精品无码成人片久久| 99re在线精品视频免费| 亚洲乱码一区二区三区国产精品| 国产在线98福利播放视频免费| aaa毛片视频免费观看| 亚洲国产美女视频| 亚洲国产精品一区二区九九 |