摘要:本人郵箱歡迎轉(zhuǎn)載轉(zhuǎn)載請(qǐng)注明網(wǎng)址代碼已經(jīng)全部托管有需要的同學(xué)自行下載引言今天我打算講一下這三個(gè)方法首先我們查看一下看看官方對(duì)這幾個(gè)方法的介紹理論導(dǎo)致當(dāng)前線程一直等待直到另一外一個(gè)線程用同一個(gè)對(duì)象調(diào)用或方法換種說法就是調(diào)用和調(diào)用行為是一致的在調(diào)
引言本人郵箱:
歡迎轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)注明網(wǎng)址 http://blog.csdn.net/tianshi_kco
github: https://github.com/kco1989/kco
代碼已經(jīng)全部托管github有需要的同學(xué)自行下載
今天我打算講一下Object.wait,Object.notify,Object.notifyAll這三個(gè)方法. 首先我們查看一下api看看,官方api對(duì)這幾個(gè)方法的介紹.
理論Object.wait(): 導(dǎo)致當(dāng)前線程一直等待,直到另一外一個(gè)線程用同一個(gè)對(duì)象調(diào)用Object.notify或Object.notifyAll方法.換種說法,就是調(diào)用Object.wait()和調(diào)用Object.wait(0)行為是一致的.
在調(diào)用wait時(shí),必須要有調(diào)用對(duì)象的鎖.而這個(gè)鎖會(huì)一直等待直接這個(gè)對(duì)象調(diào)用notify或notifyAll方法才被釋放.這是等待的線程才能重新獲取對(duì)象的鎖而繼續(xù)執(zhí)行.
這里需要防止中斷或假喚醒線程,所以一般在調(diào)用wait會(huì)使用循環(huán),比如
synchronized (obj) { while (當(dāng)條件不滿足時(shí)) obj.wait(); ... // Perform action appropriate to condition }
Object.notify/Object.notifyAll 喚醒一個(gè)擁有用到當(dāng)前對(duì)象的鎖且在等待的線程.如果有多個(gè)等待的線程,則隨機(jī)喚醒一個(gè).而被喚醒的線程會(huì)直到當(dāng)前線程釋放對(duì)象的鎖后才被執(zhí)行.被喚醒的線程會(huì)使用競爭的方式去獲取對(duì)象的鎖.這些被喚醒的線程都是一視同仁,不會(huì)被區(qū)別對(duì)待.所以每個(gè)線程獲取對(duì)象的鎖的幾率都是平等的,也是隨機(jī)的.
總之,在同一個(gè)時(shí)間點(diǎn)只能有一個(gè)線程擁有對(duì)象的鎖.
上面的解釋可能比較官方,出現(xiàn)什么對(duì)象的鎖,喚醒等待之類的時(shí).初學(xué)者可能還不能很好的理解.現(xiàn)在我還是用上篇文章的比喻解釋一下.
比如現(xiàn)在有一群小明/"小紅"都想進(jìn)入臥室,臥室的門只有一個(gè),鑰匙也只有一把,每次也只能進(jìn)入一個(gè)"小明"和一個(gè)小紅.(多了就...)這時(shí)候臥室里面如果只有有一個(gè)人,那么他/她就只能等待,然后釋放臥室門的鎖.然后喚醒另外一個(gè)她/他進(jìn)來.進(jìn)來后把臥室門給鎖了,等小明和小紅談完人生和理想的時(shí)候.再通知其他人,告訴他們房間是空的,可以進(jìn)來了.這是另外的一群小明/小紅就會(huì)爭先恐后的進(jìn)來.但還是只能進(jìn)一個(gè)小明和一個(gè)小紅.(這里不理解,沒有關(guān)系,看完文章之后,再回過頭看一下這里,說不定就會(huì)豁然開朗了.)
編碼這些人比喻就是上面講到的線程,臥室就相當(dāng)于上面說的對(duì)象,門就相當(dāng)于上面的鎖,這樣一比喻是不是好理解一點(diǎn).需要注意的是臥室是特定的一個(gè),即每個(gè)人等待的臥室都必須是同一個(gè).這樣才能用那把鑰匙去開門.
如果有些人還不能理解,那么這里我就寫一個(gè)程序再來解析一下.就用上面的比喻做例子吧.ok,開始編碼.
首先,我們要先定一個(gè)抽象臥室類Room,這個(gè)類需要用成員變量gril,還必須提供兩個(gè)方法makeGridInRoom(String gril)和playWithGril(String boy),這個(gè)類的實(shí)現(xiàn)我們暫時(shí)先放放,后面再說
之后,我們要?jiǎng)?chuàng)建中間人來一個(gè)找小妞的類,GrilProduct,把臥室room傳進(jìn)來,然后依此找到十個(gè)小妞進(jìn)入臥室里.
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 + "號(hào)"); } } }
然后,我們還需要有一個(gè)花花公子類,來和小妞談?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); } }
最后,我們要讓那個(gè)中間人活動(dòng)起來,而且需要來依此十個(gè)花花公子來和小妞談人生,談理想.畢竟小妞一個(gè)人也只能應(yīng)付一個(gè)花花公子,加班是很累的.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)); SetboyThread = new HashSet<>(); for (int i = 0; i < 10; i ++){ boyThread.add(new Thread(new PlayBoy(room, "小明" + i + "號(hào)"))); } grilProduct.start(); for (Thread boy : boyThread){ boy.start(); } } }
行了,現(xiàn)在開始來考慮Room要怎么寫.
第一個(gè)想法,比較簡單,小妞來了就來了,花花公子來了就開始談人生,談理想.編寫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; } }
運(yùn)行一下結(jié)果:
小明1號(hào) play with 小紅9號(hào) 小明3號(hào) play with null 小明6號(hào) play with null 小明0號(hào) play with null 小明8號(hào) play with null 小明5號(hào) play with null 小明7號(hào) play with null 小明2號(hào) play with null 小明4號(hào) play with null 小明9號(hào) play with null
我靠,怎么只有小明1號(hào)和小紅9號(hào)聊上了,其他公子自己玩. 哦,原來是小紅9號(hào)把前面幾個(gè)給擠掉了,其他小明,小紅不服了,憑什么小紅9號(hào)那么霸氣.行,為了滿足大家,繼續(xù)改..
第二個(gè)想法,如果花花公子來了,但小妞不在臥室,那么公子就會(huì)離開;另外如果一個(gè)小妞發(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; } }
運(yùn)行結(jié)果是
小明1號(hào) play with 小紅0號(hào)
而且每次運(yùn)行結(jié)果都不一樣,這時(shí)候其他人不爽了,為什么我進(jìn)入的時(shí)候沒人呢?
這里我們需要改變一下策略.如果臥室沒人.那么讓他們就睡一下,等待其他人來談完人生再走.
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; } }
運(yùn)行結(jié)果.我靠,臥室被鎖了,而且只有一個(gè)人一直在里面孤零零的等著,永遠(yuǎn)等不到另外一個(gè)人來.悲劇了.....
不行,我們還是要改變一下策略.如果花花公子發(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; } }
運(yùn)行結(jié)果:
小明9號(hào) play with 小紅0號(hào) 小明1號(hào) play with 小紅1號(hào) 小明4號(hào) play with 小紅2號(hào) 小明3號(hào) play with 小紅3號(hào) 小明2號(hào) play with 小紅4號(hào) 小明6號(hào) play with 小紅5號(hào) 小明7號(hào) play with 小紅6號(hào) 小明0號(hào) play with 小紅7號(hào) 小明5號(hào) play with 小紅8號(hào) 小明8號(hào) play with 小紅9號(hào)
謝天謝地啊,每個(gè)小明都找到小紅了,我再也不用擔(dān)心被小明/小紅在k死了.
后記在最后兩種做法,一種是調(diào)用Thread.sleep,一種是調(diào)用Object.wait.兩種都是是線程睡眠等待,但為什么結(jié)果不一樣呢?這里解釋一下,Thread.sleep會(huì)釋放資源,但是不會(huì)釋放鎖,所以如果有人進(jìn)入臥室,就一直霸占這這個(gè)臥室,其他壓根都進(jìn)不來.但Object.wait除了會(huì)釋放資源之外,還會(huì)釋放鎖.等到小紅/小明進(jìn)入臥室,在通知小明/小紅進(jìn)入臥室.
還有使用Object.notifyAll和Object.notify,我自己覺得在可以使用Object.notify的地方,都可以使用Object.notifyAll代替,但是可以使用Object.notifyAll卻不能使用Object.notify代替. 在上述的例子,如果只有一個(gè)中間人GrilProduct只找一個(gè)小紅,而且也只有一個(gè)花花公子PlayBoy,那么使用Object.notify和Object.notifyAll都一樣,但是如果有多個(gè)花花公子,就必須使用Object.notifyAll去喚醒所有人,讓其中一個(gè)人跑進(jìn)臥室里.其他人進(jìn)不去,就繼續(xù)等待.然后繼續(xù)全部喚醒,繼續(xù)等待....
Object.wait()和Object.wait(long)的區(qū)別,wait()是進(jìn)入臥室之后就一直等,直到被喚醒,wait(long)則是進(jìn)入臥室之后一直等或者到了指定時(shí)間內(nèi)被喚醒
對(duì)上面的例子改寫一下,在GrilProduct改為每500ms才找到一個(gè)小紅
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 + "號(hào)"); } } }
然后對(duì)Room4.playWithGril改為
@Override public synchronized void playWithGril(String boy){ while (this.gril == null){ try { System.out.println(boy + " 我的心在等待,永遠(yuǎn)在等待..."); 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; }
運(yùn)行一下
小明1號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明6號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明3號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明5號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明0號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明8號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明7號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明2號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明4號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明9號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明9號(hào) play with 小紅0號(hào) 小明4號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明2號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明7號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明8號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明0號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明5號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明3號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明6號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明1號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明1號(hào) play with 小紅1號(hào) 小明6號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明3號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明5號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明0號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明8號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明7號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明2號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明4號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明4號(hào) play with 小紅2號(hào) 小明2號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明7號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明8號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明0號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明5號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明3號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明6號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明6號(hào) play with 小紅3號(hào) 小明3號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明5號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明0號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明8號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明7號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明2號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明2號(hào) play with 小紅4號(hào) 小明7號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明8號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明0號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明5號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明3號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明3號(hào) play with 小紅5號(hào) 小明5號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明0號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明8號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明7號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明7號(hào) play with 小紅6號(hào) 小明8號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明0號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明5號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明5號(hào) play with 小紅7號(hào) 小明0號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明8號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明8號(hào) play with 小紅8號(hào) 小明0號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明0號(hào) play with 小紅9號(hào)
然后在對(duì)Room4.playWithGril改寫為
@Override public synchronized void playWithGril(String boy){ while (this.gril == null){ try { System.out.println(boy + " 我的心在等待,永遠(yuǎn)在等待..."); 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; }
然后再運(yùn)行一下
小明3號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明1號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明6號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明0號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明8號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明5號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明7號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明2號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明4號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明9號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明3號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明1號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明6號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明8號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明0號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明5號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明7號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明9號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明2號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明4號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明1號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明3號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明6號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明5號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明8號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明0號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明9號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明2號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明4號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明7號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明1號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明3號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明6號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明0號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明8號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明5號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明2號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明7號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明4號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明9號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明3號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明1號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明6號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明8號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明5號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明0號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明2號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明4號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明9號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明7號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明1號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明1號(hào) play with 小紅0號(hào) 小明7號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明9號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明4號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明2號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明0號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明5號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明8號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明6號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明3號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明6號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明5號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明9號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明7號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明3號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明2號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明0號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明4號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明8號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明6號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明7號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明2號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明0號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明8號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明5號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明9號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明3號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明4號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明6號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明0號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明7號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明4號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明8號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明2號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明3號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明5號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明9號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明8號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明7號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明5號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明3號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明9號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明4號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明0號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明2號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明6號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明3號(hào) play with 小紅1號(hào) 小明6號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明2號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明0號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明4號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明9號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明5號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明7號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明8號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明5號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明8號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明6號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明9號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明4號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明0號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明2號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明7號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明8號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明9號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明0號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明2號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明5號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明7號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明4號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明6號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明7號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明6號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明2號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明4號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明5號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明8號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明0號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明9號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明7號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明6號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明8號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明0號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明9號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明4號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明2號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明5號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明4號(hào) play with 小紅2號(hào) 小明8號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明0號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明5號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明2號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明9號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明7號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明6號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明7號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明6號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明0號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明9號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明2號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明5號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明8號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明8號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明0號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明2號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明5號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明6號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明9號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明7號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明2號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明7號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明6號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明9號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明0號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明8號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明5號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明6號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明7號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明2號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明9號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明8號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明0號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明5號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明8號(hào) play with 小紅3號(hào) 小明5號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明9號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明6號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明0號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明2號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明7號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明6號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明7號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明2號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明0號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明9號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明5號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明9號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明7號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明6號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明5號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明2號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明0號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明2號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明7號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明6號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明0號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明9號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明5號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明0號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明6號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明7號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明9號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明5號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明2號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明6號(hào) play with 小紅4號(hào) 小明2號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明0號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明5號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明9號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明7號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明9號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明7號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明2號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明5號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明0號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明2號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明0號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明9號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明7號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明5號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明9號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明7號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明5號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明0號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明2號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明0號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明7號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明9號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明5號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明2號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明7號(hào) play with 小紅5號(hào) 小明0號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明2號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明9號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明5號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明0號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明2號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明5號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明9號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明9號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明5號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明2號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明0號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明2號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明5號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明9號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明0號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明2號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明9號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明5號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明0號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明0號(hào) play with 小紅6號(hào) 小明5號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明9號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明2號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明2號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明9號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明5號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明2號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明5號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明9號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明2號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明5號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明9號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明9號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明2號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明5號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明5號(hào) play with 小紅7號(hào) 小明2號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明9號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明2號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明9號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明2號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明9號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明2號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明9號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明2號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明9號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明9號(hào) play with 小紅8號(hào) 小明2號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明2號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明2號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明2號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明2號(hào) 我的心在等待,永遠(yuǎn)在等待... 小明2號(hào) play with 小紅9號(hào)
最后,聰明的讀者就自己對(duì)比一下,兩份輸出有什么不一樣的地方,就可以搞定wait()和wait(long)的區(qū)別,這時(shí)也應(yīng)該能明白為什么wait方法的調(diào)用要寫在while循環(huán)里面了.
打賞如果覺得我的文章寫的還過得去的話,有錢就捧個(gè)錢場,沒錢給我捧個(gè)人場(幫我點(diǎn)贊或推薦一下)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/67043.html
摘要:前言上一篇文章我們講了的同步代碼塊這一篇我們來看看同步代碼塊之間的協(xié)作與通信閱讀本篇前你需要知道什么是同步代碼塊什么是監(jiān)視器鎖還不是很了解的同學(xué)建議先去看一看上一篇文章本文的源碼基于系列文章目錄概述在中我們可以使用這個(gè)方法來實(shí)現(xiàn)同步代碼塊之 前言 上一篇文章我們講了java的同步代碼塊, 這一篇我們來看看同步代碼塊之間的協(xié)作與通信. 閱讀本篇前你需要知道什么是同步代碼塊, 什么是監(jiān)視器...
摘要:一線程的基本概念單線程簡單的說,單線程就是進(jìn)程中只有一個(gè)線程。多線程由一個(gè)以上線程組成的程序稱為多線程程序。當(dāng)線程調(diào)用完方法進(jìn)入后會(huì)自動(dòng)釋放鎖,線程獲得鎖。 一、線程的基本概念 1.1 單線程 簡單的說,單線程就是進(jìn)程中只有一個(gè)線程。單線程在程序執(zhí)行時(shí),所走的程序路徑按照連續(xù)順序排下來,前面的必須處理好,后面的才會(huì)執(zhí)行。 Java示例: public class SingleThrea...
摘要:為了解決這個(gè)問題于是引入了生產(chǎn)者和消費(fèi)者模式。代碼實(shí)現(xiàn)多生產(chǎn)者和多消費(fèi)者實(shí)現(xiàn)阻塞隊(duì)列,將生產(chǎn)者和消費(fèi)者解耦。已經(jīng)滿了等待用使用于多個(gè)生產(chǎn)者的情況說明中有元素可以取用使用于多個(gè)消費(fèi)者的情況。 為什么要使用生產(chǎn)者和消費(fèi)者模式 在線程世界里,生產(chǎn)者就是生產(chǎn)數(shù)據(jù)的線程,消費(fèi)者就是消費(fèi)數(shù)據(jù)的線程。 在多線程開發(fā)當(dāng)中,如果生產(chǎn)者處理速度很快,而消費(fèi)者處理速度很慢,那么生產(chǎn)者就必須等待消費(fèi)者處理完...
摘要:已經(jīng)在上面有提到過,和的作用是喚醒正在的線程,是隨機(jī)喚醒線程中的一個(gè),則是喚醒全部。釋放和不釋放鎖在多線程的操作中,鎖的釋放與否是必須要清楚的,是會(huì)釋放鎖,而則不會(huì)。 wait wait方法是Object中的方法,這個(gè)方法的功能特性:1).執(zhí)行wait方法的前提是當(dāng)前線程已經(jīng)獲取到對(duì)象的鎖,也就是wait方法必須在synchronized修飾的代碼塊或者方法中使用。2).執(zhí)行wait之...
閱讀 1769·2021-10-19 13:30
閱讀 1335·2021-10-14 09:48
閱讀 1531·2021-09-22 15:17
閱讀 2007·2019-08-30 15:52
閱讀 3273·2019-08-30 11:23
閱讀 1983·2019-08-29 15:27
閱讀 887·2019-08-29 13:55
閱讀 753·2019-08-26 14:05