成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

(三)java多線程之wait notify notifyAll

chadLi / 392人閱讀

摘要:本人郵箱歡迎轉(zhuǎn)載轉(zhuǎn)載請注明網(wǎng)址代碼已經(jīng)全部托管有需要的同學(xué)自行下載引言今天我打算講一下這三個方法首先我們查看一下看看官方對這幾個方法的介紹理論導(dǎo)致當(dāng)前線程一直等待直到另一外一個線程用同一個對象調(diào)用或方法換種說法就是調(diào)用和調(diào)用行為是一致的在調(diào)

本人郵箱:
歡迎轉(zhuǎn)載,轉(zhuǎn)載請注明網(wǎng)址 http://blog.csdn.net/tianshi_kco
github: https://github.com/kco1989/kco
代碼已經(jīng)全部托管github有需要的同學(xué)自行下載

引言

今天我打算講一下Object.wait,Object.notify,Object.notifyAll這三個方法. 首先我們查看一下api看看,官方api對這幾個方法的介紹.

理論

Object.wait(): 導(dǎo)致當(dāng)前線程一直等待,直到另一外一個線程用同一個對象調(diào)用Object.notifyObject.notifyAll方法.換種說法,就是調(diào)用Object.wait()和調(diào)用Object.wait(0)行為是一致的.
在調(diào)用wait時,必須要有調(diào)用對象的鎖.而這個鎖會一直等待直接這個對象調(diào)用notifynotifyAll方法才被釋放.這是等待的線程才能重新獲取對象的鎖而繼續(xù)執(zhí)行.

這里需要防止中斷或假喚醒線程,所以一般在調(diào)用wait會使用循環(huán),比如

synchronized (obj) {
     while (當(dāng)條件不滿足時)
        obj.wait();
        ... // Perform action appropriate to condition
}

Object.notify/Object.notifyAll 喚醒一個擁有用到當(dāng)前對象的鎖且在等待的線程.如果有多個等待的線程,則隨機喚醒一個.而被喚醒的線程會直到當(dāng)前線程釋放對象的鎖后才被執(zhí)行.被喚醒的線程會使用競爭的方式去獲取對象的鎖.這些被喚醒的線程都是一視同仁,不會被區(qū)別對待.所以每個線程獲取對象的鎖的幾率都是平等的,也是隨機的.

總之,在同一個時間點只能有一個線程擁有對象的鎖.

上面的解釋可能比較官方,出現(xiàn)什么對象的鎖,喚醒等待之類的時.初學(xué)者可能還不能很好的理解.現(xiàn)在我還是用上篇文章的比喻解釋一下.

比如現(xiàn)在有一群小明/"小紅"都想進入臥室,臥室的門只有一個,鑰匙也只有一把,每次也只能進入一個"小明"和一個小紅.(多了就...)這時候臥室里面如果只有有一個人,那么他/她就只能等待,然后釋放臥室門的鎖.然后喚醒另外一個她/他進來.進來后把臥室門給鎖了,等小明小紅談完人生和理想的時候.再通知其他人,告訴他們房間是空的,可以進來了.這是另外的一群小明/小紅就會爭先恐后的進來.但還是只能進一個小明和一個小紅.(這里不理解,沒有關(guān)系,看完文章之后,再回過頭看一下這里,說不定就會豁然開朗了.)

這些人比喻就是上面講到的線程,臥室就相當(dāng)于上面說的對象,門就相當(dāng)于上面的,這樣一比喻是不是好理解一點.需要注意的是臥室是特定的一個,即每個人等待的臥室都必須是同一個.這樣才能用那把鑰匙去開門.

編碼

如果有些人還不能理解,那么這里我就寫一個程序再來解析一下.就用上面的比喻做例子吧.ok,開始編碼.

首先,我們要先定一個抽象臥室類Room,這個類需要用成員變量gril,還必須提供兩個方法makeGridInRoom(String gril)playWithGril(String boy),這個類的實現(xiàn)我們暫時先放放,后面再說

之后,我們要創(chuàng)建中間人來一個找小妞的類,GrilProduct,把臥室room傳進來,然后依此找到十個小妞進入臥室里.

public class GrilProduct implements Runnable{
    private Room room;
    public GrilProduct(Room room) {
        this.room = room;
    }

    @Override
    public void run() {
        for (int i = 0; i < 10; i ++){
            room.makeGridInRoom("小紅" + i + "號");
        }
    }
}

然后,我們還需要有一個花花公子類,來和小妞談?wù)勅松?說說理想,PlayBoy

public class PlayBoy implements Runnable{
    private Room room;
    private String boy;
    public PlayBoy(Room room, String boy) {
        this.room = room;
        this.boy = boy;
    }

    @Override
    public void run() {
        room.playWithGril(boy);
    }
}

最后,我們要讓那個中間人活動起來,而且需要來依此十個花花公子來和小妞談人生,談理想.畢竟小妞一個人也只能應(yīng)付一個花花公子,加班是很累的.TestMain

public class TestMain {
    public static void main(String[] args) {
        Room room1 = new Room1();
        playGameInRoom(room1);

//        Room room2 = new Room2();
//        playGameInRoom(room2);
//
//        Room room3 = new Room3();
//        playGameInRoom(room3);
//
//        Room room4 = new Room4();
//        playGameInRoom(room4);
    }

    public static void playGameInRoom(Room room){
        Thread grilProduct = new Thread(new GrilProduct(room));
        Set boyThread = new HashSet<>();
        for (int i = 0; i < 10; i ++){
            boyThread.add(new Thread(new PlayBoy(room, "小明" + i + "號")));
        }

        grilProduct.start();
        for (Thread boy : boyThread){
            boy.start();
        }
    }

}

行了,現(xiàn)在開始來考慮Room要怎么寫.

第一個想法,比較簡單,小妞來了就來了,花花公子來了就開始談人生,談理想.編寫Room1繼承Room

public class Room1 extends Room{

    private String gril;

    @Override
    public synchronized void makeGridInRoom(String gril){
        this.gril = gril;
    }

    @Override
    public synchronized void playWithGril(String boy){
        System.out.println(boy + " play with " + this.gril);
        this.gril = null;
    }
}

運行一下結(jié)果:

小明1號 play with 小紅9號
小明3號 play with null
小明6號 play with null
小明0號 play with null
小明8號 play with null
小明5號 play with null
小明7號 play with null
小明2號 play with null
小明4號 play with null
小明9號 play with null

我靠,怎么只有小明1號小紅9號聊上了,其他公子自己玩. 哦,原來是小紅9號把前面幾個給擠掉了,其他小明,小紅不服了,憑什么小紅9號那么霸氣.行,為了滿足大家,繼續(xù)改..

第二個想法,如果花花公子來了,但小妞不在臥室,那么公子就會離開;另外如果一個小妞發(fā)現(xiàn)臥室有人,她也選擇離開.

public class Room2 extends Room{

    @Override
    public synchronized void makeGridInRoom(String gril){
        if (this.gril != null){
            return;
        }
        this.gril = gril;
    }

    @Override
    public synchronized void playWithGril(String boy){
        if (this.gril == null){
            return;
        }
        System.out.println(boy + " play with " + this.gril);
        this.gril = null;
    }
}

運行結(jié)果是

小明1號 play with 小紅0號

而且每次運行結(jié)果都不一樣,這時候其他人不爽了,為什么我進入的時候沒人呢?
這里我們需要改變一下策略.如果臥室沒人.那么讓他們就睡一下,等待其他人來談完人生再走.

public class Room3 extends Room{

    @Override
    public synchronized void makeGridInRoom(String gril){
        while (this.gril != null){
            try {
                Thread.sleep(10);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        this.gril = gril;
    }

    @Override
    public synchronized void playWithGril(String boy){
        while (this.gril == null){
            try {
                Thread.sleep(10);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        System.out.println(boy + " play with " + this.gril);
        this.gril = null;
    }
}

運行結(jié)果.我靠,臥室被鎖了,而且只有一個人一直在里面孤零零的等著,永遠等不到另外一個人來.悲劇了.....

不行,我們還是要改變一下策略.如果花花公子發(fā)現(xiàn)臥室里沒有小妞,那就先等著.等待小妞來了,讓她來叫醒我.小妞也是一樣,如果臥室里已經(jīng)有小妞了,那么就先等著,等他們談完人生,談完理想再來叫醒我.

public class Room4 extends Room{

    @Override
    public synchronized void makeGridInRoom(String gril){
        while (this.gril != null){
            try {
                this.wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        try {
            Thread.sleep(10);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        this.notifyAll();
        this.gril = gril;
    }

    @Override
    public synchronized void playWithGril(String boy){
        while (this.gril == null){
            try {
                this.wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        System.out.println(boy + " play with " + this.gril);
        try {
            Thread.sleep(10);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        this.notifyAll();
        this.gril = null;
    }
}

運行結(jié)果:

小明9號 play with 小紅0號
小明1號 play with 小紅1號
小明4號 play with 小紅2號
小明3號 play with 小紅3號
小明2號 play with 小紅4號
小明6號 play with 小紅5號
小明7號 play with 小紅6號
小明0號 play with 小紅7號
小明5號 play with 小紅8號
小明8號 play with 小紅9號

謝天謝地啊,每個小明都找到小紅了,我再也不用擔(dān)心被小明/小紅在k死了.

后記

在最后兩種做法,一種是調(diào)用Thread.sleep,一種是調(diào)用Object.wait.兩種都是是線程睡眠等待,但為什么結(jié)果不一樣呢?這里解釋一下,Thread.sleep會釋放資源,但是不會釋放鎖,所以如果有人進入臥室,就一直霸占這這個臥室,其他壓根都進不來.但Object.wait除了會釋放資源之外,還會釋放鎖.等到小紅/小明進入臥室,在通知小明/小紅進入臥室.

還有使用Object.notifyAllObject.notify,我自己覺得在可以使用Object.notify的地方,都可以使用Object.notifyAll代替,但是可以使用Object.notifyAll卻不能使用Object.notify代替. 在上述的例子,如果只有一個中間人GrilProduct只找一個小紅,而且也只有一個花花公子PlayBoy,那么使用Object.notifyObject.notifyAll都一樣,但是如果有多個花花公子,就必須使用Object.notifyAll去喚醒所有人,讓其中一個人跑進臥室里.其他人進不去,就繼續(xù)等待.然后繼續(xù)全部喚醒,繼續(xù)等待....

Object.wait()Object.wait(long)的區(qū)別,wait()是進入臥室之后就一直等,直到被喚醒,wait(long)則是進入臥室之后一直等或者到了指定時間內(nèi)被喚醒

對上面的例子改寫一下,在GrilProduct改為每500ms才找到一個小紅

public class GrilProduct implements Runnable{
    private Room room;
    public GrilProduct(Room room) {
        this.room = room;
    }

    @Override
    public void run() {
        for (int i = 0; i < 10; i ++){
            try {
                Thread.sleep(500);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            room.makeGridInRoom("小紅" + i + "號");
        }
    }
}

然后對Room4.playWithGril改為

@Override
public synchronized void playWithGril(String boy){
    while (this.gril == null){
        try {
            System.out.println(boy + " 我的心在等待,永遠在等待...");
            this.wait();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
    System.out.println(boy + " play with " + this.gril);
    try {
        Thread.sleep(10);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }

    this.notifyAll();
    this.gril = null;
}

運行一下

小明1號 我的心在等待,永遠在等待...
小明6號 我的心在等待,永遠在等待...
小明3號 我的心在等待,永遠在等待...
小明5號 我的心在等待,永遠在等待...
小明0號 我的心在等待,永遠在等待...
小明8號 我的心在等待,永遠在等待...
小明7號 我的心在等待,永遠在等待...
小明2號 我的心在等待,永遠在等待...
小明4號 我的心在等待,永遠在等待...
小明9號 我的心在等待,永遠在等待...
小明9號 play with 小紅0號
小明4號 我的心在等待,永遠在等待...
小明2號 我的心在等待,永遠在等待...
小明7號 我的心在等待,永遠在等待...
小明8號 我的心在等待,永遠在等待...
小明0號 我的心在等待,永遠在等待...
小明5號 我的心在等待,永遠在等待...
小明3號 我的心在等待,永遠在等待...
小明6號 我的心在等待,永遠在等待...
小明1號 我的心在等待,永遠在等待...
小明1號 play with 小紅1號
小明6號 我的心在等待,永遠在等待...
小明3號 我的心在等待,永遠在等待...
小明5號 我的心在等待,永遠在等待...
小明0號 我的心在等待,永遠在等待...
小明8號 我的心在等待,永遠在等待...
小明7號 我的心在等待,永遠在等待...
小明2號 我的心在等待,永遠在等待...
小明4號 我的心在等待,永遠在等待...
小明4號 play with 小紅2號
小明2號 我的心在等待,永遠在等待...
小明7號 我的心在等待,永遠在等待...
小明8號 我的心在等待,永遠在等待...
小明0號 我的心在等待,永遠在等待...
小明5號 我的心在等待,永遠在等待...
小明3號 我的心在等待,永遠在等待...
小明6號 我的心在等待,永遠在等待...
小明6號 play with 小紅3號
小明3號 我的心在等待,永遠在等待...
小明5號 我的心在等待,永遠在等待...
小明0號 我的心在等待,永遠在等待...
小明8號 我的心在等待,永遠在等待...
小明7號 我的心在等待,永遠在等待...
小明2號 我的心在等待,永遠在等待...
小明2號 play with 小紅4號
小明7號 我的心在等待,永遠在等待...
小明8號 我的心在等待,永遠在等待...
小明0號 我的心在等待,永遠在等待...
小明5號 我的心在等待,永遠在等待...
小明3號 我的心在等待,永遠在等待...
小明3號 play with 小紅5號
小明5號 我的心在等待,永遠在等待...
小明0號 我的心在等待,永遠在等待...
小明8號 我的心在等待,永遠在等待...
小明7號 我的心在等待,永遠在等待...
小明7號 play with 小紅6號
小明8號 我的心在等待,永遠在等待...
小明0號 我的心在等待,永遠在等待...
小明5號 我的心在等待,永遠在等待...
小明5號 play with 小紅7號
小明0號 我的心在等待,永遠在等待...
小明8號 我的心在等待,永遠在等待...
小明8號 play with 小紅8號
小明0號 我的心在等待,永遠在等待...
小明0號 play with 小紅9號

然后在對Room4.playWithGril改寫為

@Override
public synchronized void playWithGril(String boy){
    while (this.gril == null){
        try {
            System.out.println(boy + " 我的心在等待,永遠在等待...");
            this.wait(100);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
    System.out.println(boy + " play with " + this.gril);
    try {
        Thread.sleep(10);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }

    this.notifyAll();
    this.gril = null;
}

然后再運行一下

小明3號 我的心在等待,永遠在等待...
小明1號 我的心在等待,永遠在等待...
小明6號 我的心在等待,永遠在等待...
小明0號 我的心在等待,永遠在等待...
小明8號 我的心在等待,永遠在等待...
小明5號 我的心在等待,永遠在等待...
小明7號 我的心在等待,永遠在等待...
小明2號 我的心在等待,永遠在等待...
小明4號 我的心在等待,永遠在等待...
小明9號 我的心在等待,永遠在等待...
小明3號 我的心在等待,永遠在等待...
小明1號 我的心在等待,永遠在等待...
小明6號 我的心在等待,永遠在等待...
小明8號 我的心在等待,永遠在等待...
小明0號 我的心在等待,永遠在等待...
小明5號 我的心在等待,永遠在等待...
小明7號 我的心在等待,永遠在等待...
小明9號 我的心在等待,永遠在等待...
小明2號 我的心在等待,永遠在等待...
小明4號 我的心在等待,永遠在等待...
小明1號 我的心在等待,永遠在等待...
小明3號 我的心在等待,永遠在等待...
小明6號 我的心在等待,永遠在等待...
小明5號 我的心在等待,永遠在等待...
小明8號 我的心在等待,永遠在等待...
小明0號 我的心在等待,永遠在等待...
小明9號 我的心在等待,永遠在等待...
小明2號 我的心在等待,永遠在等待...
小明4號 我的心在等待,永遠在等待...
小明7號 我的心在等待,永遠在等待...
小明1號 我的心在等待,永遠在等待...
小明3號 我的心在等待,永遠在等待...
小明6號 我的心在等待,永遠在等待...
小明0號 我的心在等待,永遠在等待...
小明8號 我的心在等待,永遠在等待...
小明5號 我的心在等待,永遠在等待...
小明2號 我的心在等待,永遠在等待...
小明7號 我的心在等待,永遠在等待...
小明4號 我的心在等待,永遠在等待...
小明9號 我的心在等待,永遠在等待...
小明3號 我的心在等待,永遠在等待...
小明1號 我的心在等待,永遠在等待...
小明6號 我的心在等待,永遠在等待...
小明8號 我的心在等待,永遠在等待...
小明5號 我的心在等待,永遠在等待...
小明0號 我的心在等待,永遠在等待...
小明2號 我的心在等待,永遠在等待...
小明4號 我的心在等待,永遠在等待...
小明9號 我的心在等待,永遠在等待...
小明7號 我的心在等待,永遠在等待...
小明1號 我的心在等待,永遠在等待...
小明1號 play with 小紅0號
小明7號 我的心在等待,永遠在等待...
小明9號 我的心在等待,永遠在等待...
小明4號 我的心在等待,永遠在等待...
小明2號 我的心在等待,永遠在等待...
小明0號 我的心在等待,永遠在等待...
小明5號 我的心在等待,永遠在等待...
小明8號 我的心在等待,永遠在等待...
小明6號 我的心在等待,永遠在等待...
小明3號 我的心在等待,永遠在等待...
小明6號 我的心在等待,永遠在等待...
小明5號 我的心在等待,永遠在等待...
小明9號 我的心在等待,永遠在等待...
小明7號 我的心在等待,永遠在等待...
小明3號 我的心在等待,永遠在等待...
小明2號 我的心在等待,永遠在等待...
小明0號 我的心在等待,永遠在等待...
小明4號 我的心在等待,永遠在等待...
小明8號 我的心在等待,永遠在等待...
小明6號 我的心在等待,永遠在等待...
小明7號 我的心在等待,永遠在等待...
小明2號 我的心在等待,永遠在等待...
小明0號 我的心在等待,永遠在等待...
小明8號 我的心在等待,永遠在等待...
小明5號 我的心在等待,永遠在等待...
小明9號 我的心在等待,永遠在等待...
小明3號 我的心在等待,永遠在等待...
小明4號 我的心在等待,永遠在等待...
小明6號 我的心在等待,永遠在等待...
小明0號 我的心在等待,永遠在等待...
小明7號 我的心在等待,永遠在等待...
小明4號 我的心在等待,永遠在等待...
小明8號 我的心在等待,永遠在等待...
小明2號 我的心在等待,永遠在等待...
小明3號 我的心在等待,永遠在等待...
小明5號 我的心在等待,永遠在等待...
小明9號 我的心在等待,永遠在等待...
小明8號 我的心在等待,永遠在等待...
小明7號 我的心在等待,永遠在等待...
小明5號 我的心在等待,永遠在等待...
小明3號 我的心在等待,永遠在等待...
小明9號 我的心在等待,永遠在等待...
小明4號 我的心在等待,永遠在等待...
小明0號 我的心在等待,永遠在等待...
小明2號 我的心在等待,永遠在等待...
小明6號 我的心在等待,永遠在等待...
小明3號 play with 小紅1號
小明6號 我的心在等待,永遠在等待...
小明2號 我的心在等待,永遠在等待...
小明0號 我的心在等待,永遠在等待...
小明4號 我的心在等待,永遠在等待...
小明9號 我的心在等待,永遠在等待...
小明5號 我的心在等待,永遠在等待...
小明7號 我的心在等待,永遠在等待...
小明8號 我的心在等待,永遠在等待...
小明5號 我的心在等待,永遠在等待...
小明8號 我的心在等待,永遠在等待...
小明6號 我的心在等待,永遠在等待...
小明9號 我的心在等待,永遠在等待...
小明4號 我的心在等待,永遠在等待...
小明0號 我的心在等待,永遠在等待...
小明2號 我的心在等待,永遠在等待...
小明7號 我的心在等待,永遠在等待...
小明8號 我的心在等待,永遠在等待...
小明9號 我的心在等待,永遠在等待...
小明0號 我的心在等待,永遠在等待...
小明2號 我的心在等待,永遠在等待...
小明5號 我的心在等待,永遠在等待...
小明7號 我的心在等待,永遠在等待...
小明4號 我的心在等待,永遠在等待...
小明6號 我的心在等待,永遠在等待...
小明7號 我的心在等待,永遠在等待...
小明6號 我的心在等待,永遠在等待...
小明2號 我的心在等待,永遠在等待...
小明4號 我的心在等待,永遠在等待...
小明5號 我的心在等待,永遠在等待...
小明8號 我的心在等待,永遠在等待...
小明0號 我的心在等待,永遠在等待...
小明9號 我的心在等待,永遠在等待...
小明7號 我的心在等待,永遠在等待...
小明6號 我的心在等待,永遠在等待...
小明8號 我的心在等待,永遠在等待...
小明0號 我的心在等待,永遠在等待...
小明9號 我的心在等待,永遠在等待...
小明4號 我的心在等待,永遠在等待...
小明2號 我的心在等待,永遠在等待...
小明5號 我的心在等待,永遠在等待...
小明4號 play with 小紅2號
小明8號 我的心在等待,永遠在等待...
小明0號 我的心在等待,永遠在等待...
小明5號 我的心在等待,永遠在等待...
小明2號 我的心在等待,永遠在等待...
小明9號 我的心在等待,永遠在等待...
小明7號 我的心在等待,永遠在等待...
小明6號 我的心在等待,永遠在等待...
小明7號 我的心在等待,永遠在等待...
小明6號 我的心在等待,永遠在等待...
小明0號 我的心在等待,永遠在等待...
小明9號 我的心在等待,永遠在等待...
小明2號 我的心在等待,永遠在等待...
小明5號 我的心在等待,永遠在等待...
小明8號 我的心在等待,永遠在等待...
小明8號 我的心在等待,永遠在等待...
小明0號 我的心在等待,永遠在等待...
小明2號 我的心在等待,永遠在等待...
小明5號 我的心在等待,永遠在等待...
小明6號 我的心在等待,永遠在等待...
小明9號 我的心在等待,永遠在等待...
小明7號 我的心在等待,永遠在等待...
小明2號 我的心在等待,永遠在等待...
小明7號 我的心在等待,永遠在等待...
小明6號 我的心在等待,永遠在等待...
小明9號 我的心在等待,永遠在等待...
小明0號 我的心在等待,永遠在等待...
小明8號 我的心在等待,永遠在等待...
小明5號 我的心在等待,永遠在等待...
小明6號 我的心在等待,永遠在等待...
小明7號 我的心在等待,永遠在等待...
小明2號 我的心在等待,永遠在等待...
小明9號 我的心在等待,永遠在等待...
小明8號 我的心在等待,永遠在等待...
小明0號 我的心在等待,永遠在等待...
小明5號 我的心在等待,永遠在等待...
小明8號 play with 小紅3號
小明5號 我的心在等待,永遠在等待...
小明9號 我的心在等待,永遠在等待...
小明6號 我的心在等待,永遠在等待...
小明0號 我的心在等待,永遠在等待...
小明2號 我的心在等待,永遠在等待...
小明7號 我的心在等待,永遠在等待...
小明6號 我的心在等待,永遠在等待...
小明7號 我的心在等待,永遠在等待...
小明2號 我的心在等待,永遠在等待...
小明0號 我的心在等待,永遠在等待...
小明9號 我的心在等待,永遠在等待...
小明5號 我的心在等待,永遠在等待...
小明9號 我的心在等待,永遠在等待...
小明7號 我的心在等待,永遠在等待...
小明6號 我的心在等待,永遠在等待...
小明5號 我的心在等待,永遠在等待...
小明2號 我的心在等待,永遠在等待...
小明0號 我的心在等待,永遠在等待...
小明2號 我的心在等待,永遠在等待...
小明7號 我的心在等待,永遠在等待...
小明6號 我的心在等待,永遠在等待...
小明0號 我的心在等待,永遠在等待...
小明9號 我的心在等待,永遠在等待...
小明5號 我的心在等待,永遠在等待...
小明0號 我的心在等待,永遠在等待...
小明6號 我的心在等待,永遠在等待...
小明7號 我的心在等待,永遠在等待...
小明9號 我的心在等待,永遠在等待...
小明5號 我的心在等待,永遠在等待...
小明2號 我的心在等待,永遠在等待...
小明6號 play with 小紅4號
小明2號 我的心在等待,永遠在等待...
小明0號 我的心在等待,永遠在等待...
小明5號 我的心在等待,永遠在等待...
小明9號 我的心在等待,永遠在等待...
小明7號 我的心在等待,永遠在等待...
小明9號 我的心在等待,永遠在等待...
小明7號 我的心在等待,永遠在等待...
小明2號 我的心在等待,永遠在等待...
小明5號 我的心在等待,永遠在等待...
小明0號 我的心在等待,永遠在等待...
小明2號 我的心在等待,永遠在等待...
小明0號 我的心在等待,永遠在等待...
小明9號 我的心在等待,永遠在等待...
小明7號 我的心在等待,永遠在等待...
小明5號 我的心在等待,永遠在等待...
小明9號 我的心在等待,永遠在等待...
小明7號 我的心在等待,永遠在等待...
小明5號 我的心在等待,永遠在等待...
小明0號 我的心在等待,永遠在等待...
小明2號 我的心在等待,永遠在等待...
小明0號 我的心在等待,永遠在等待...
小明7號 我的心在等待,永遠在等待...
小明9號 我的心在等待,永遠在等待...
小明5號 我的心在等待,永遠在等待...
小明2號 我的心在等待,永遠在等待...
小明7號 play with 小紅5號
小明0號 我的心在等待,永遠在等待...
小明2號 我的心在等待,永遠在等待...
小明9號 我的心在等待,永遠在等待...
小明5號 我的心在等待,永遠在等待...
小明0號 我的心在等待,永遠在等待...
小明2號 我的心在等待,永遠在等待...
小明5號 我的心在等待,永遠在等待...
小明9號 我的心在等待,永遠在等待...
小明9號 我的心在等待,永遠在等待...
小明5號 我的心在等待,永遠在等待...
小明2號 我的心在等待,永遠在等待...
小明0號 我的心在等待,永遠在等待...
小明2號 我的心在等待,永遠在等待...
小明5號 我的心在等待,永遠在等待...
小明9號 我的心在等待,永遠在等待...
小明0號 我的心在等待,永遠在等待...
小明2號 我的心在等待,永遠在等待...
小明9號 我的心在等待,永遠在等待...
小明5號 我的心在等待,永遠在等待...
小明0號 我的心在等待,永遠在等待...
小明0號 play with 小紅6號
小明5號 我的心在等待,永遠在等待...
小明9號 我的心在等待,永遠在等待...
小明2號 我的心在等待,永遠在等待...
小明2號 我的心在等待,永遠在等待...
小明9號 我的心在等待,永遠在等待...
小明5號 我的心在等待,永遠在等待...
小明2號 我的心在等待,永遠在等待...
小明5號 我的心在等待,永遠在等待...
小明9號 我的心在等待,永遠在等待...
小明2號 我的心在等待,永遠在等待...
小明5號 我的心在等待,永遠在等待...
小明9號 我的心在等待,永遠在等待...
小明9號 我的心在等待,永遠在等待...
小明2號 我的心在等待,永遠在等待...
小明5號 我的心在等待,永遠在等待...
小明5號 play with 小紅7號
小明2號 我的心在等待,永遠在等待...
小明9號 我的心在等待,永遠在等待...
小明2號 我的心在等待,永遠在等待...
小明9號 我的心在等待,永遠在等待...
小明2號 我的心在等待,永遠在等待...
小明9號 我的心在等待,永遠在等待...
小明2號 我的心在等待,永遠在等待...
小明9號 我的心在等待,永遠在等待...
小明2號 我的心在等待,永遠在等待...
小明9號 我的心在等待,永遠在等待...
小明9號 play with 小紅8號
小明2號 我的心在等待,永遠在等待...
小明2號 我的心在等待,永遠在等待...
小明2號 我的心在等待,永遠在等待...
小明2號 我的心在等待,永遠在等待...
小明2號 我的心在等待,永遠在等待...
小明2號 play with 小紅9號

最后,聰明的讀者就自己對比一下,兩份輸出有什么不一樣的地方,就可以搞定wait()wait(long)的區(qū)別,這時也應(yīng)該能明白為什么wait方法的調(diào)用要寫在while循環(huán)里面了.

打賞

如果覺得我的文章寫的還過得去的話,有錢就捧個錢場,沒錢給我捧個人場(幫我點贊或推薦一下)

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/67043.html

相關(guān)文章

  • 線程間的同步與通信(2)——wait, notify, notifyAll

    摘要:前言上一篇文章我們講了的同步代碼塊這一篇我們來看看同步代碼塊之間的協(xié)作與通信閱讀本篇前你需要知道什么是同步代碼塊什么是監(jiān)視器鎖還不是很了解的同學(xué)建議先去看一看上一篇文章本文的源碼基于系列文章目錄概述在中我們可以使用這個方法來實現(xiàn)同步代碼塊之 前言 上一篇文章我們講了java的同步代碼塊, 這一篇我們來看看同步代碼塊之間的協(xié)作與通信. 閱讀本篇前你需要知道什么是同步代碼塊, 什么是監(jiān)視器...

    djfml 評論0 收藏0
  • Java線程基礎(chǔ)(一)——線程與鎖

    摘要:一線程的基本概念單線程簡單的說,單線程就是進程中只有一個線程。多線程由一個以上線程組成的程序稱為多線程程序。當(dāng)線程調(diào)用完方法進入后會自動釋放鎖,線程獲得鎖。 一、線程的基本概念 1.1 單線程 簡單的說,單線程就是進程中只有一個線程。單線程在程序執(zhí)行時,所走的程序路徑按照連續(xù)順序排下來,前面的必須處理好,后面的才會執(zhí)行。 Java示例: public class SingleThrea...

    WelliJhon 評論0 收藏0
  • 生產(chǎn)者消費者Java簡單實現(xiàn)

    摘要:為了解決這個問題于是引入了生產(chǎn)者和消費者模式。代碼實現(xiàn)多生產(chǎn)者和多消費者實現(xiàn)阻塞隊列,將生產(chǎn)者和消費者解耦。已經(jīng)滿了等待用使用于多個生產(chǎn)者的情況說明中有元素可以取用使用于多個消費者的情況。 為什么要使用生產(chǎn)者和消費者模式 在線程世界里,生產(chǎn)者就是生產(chǎn)數(shù)據(jù)的線程,消費者就是消費數(shù)據(jù)的線程。 在多線程開發(fā)當(dāng)中,如果生產(chǎn)者處理速度很快,而消費者處理速度很慢,那么生產(chǎn)者就必須等待消費者處理完...

    HollisChuang 評論0 收藏0
  • java線程(7)wait()、notify()和notityALL()

    摘要:已經(jīng)在上面有提到過,和的作用是喚醒正在的線程,是隨機喚醒線程中的一個,則是喚醒全部。釋放和不釋放鎖在多線程的操作中,鎖的釋放與否是必須要清楚的,是會釋放鎖,而則不會。 wait wait方法是Object中的方法,這個方法的功能特性:1).執(zhí)行wait方法的前提是當(dāng)前線程已經(jīng)獲取到對象的鎖,也就是wait方法必須在synchronized修飾的代碼塊或者方法中使用。2).執(zhí)行wait之...

    LiuRhoRamen 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<