日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Java中notify()和notifyAll()的使用區別

瀏覽:125日期:2022-08-09 18:16:03

notify() 和 notifyAll() 有什么區別?

先解釋兩個概念。 等待池:假設一個線程A調用了某個對象的wait()方法,線程A就會釋放該對象的鎖后,進入到了該對象的等待池,等待池中的線程不會去競爭該對象的鎖。 鎖池:只有獲取了對象的鎖,線程才能執行對象的 synchronized 代碼,對象的鎖每次只有一個線程可以獲得,其他線程只能在鎖池中等待然后再來說notify和notifyAll的區別 如果線程調用了對象的 wait()方法,那么線程便會處于該對象的等待池中,等待池中的線程不會去競爭該對象的鎖。 當有線程調用了對象的 notifyAll()方法(喚醒所有 wait 線程)或 notify()方法(只隨機喚醒一個 wait 線程),被喚醒的的線程便會進入該對象的鎖池中,鎖池中的線程會去競爭該對象鎖。也就是說,調用了notify后只要一個線程會由等待池進入鎖池,而notifyAll會將該對象等待池內的所有線程移動到鎖池中,等待鎖競爭 優先級高的線程競爭到對象鎖的概率大,假若某線程沒有競爭到該對象鎖,它還會留在鎖池中,唯有線程再次調用 wait()方法,它才會重新回到等待池中。而競爭到對象鎖的線程則繼續往下執行,直到執行完了 synchronized 代碼塊,它會釋放掉該對象鎖,這時鎖池中的線程會繼續競爭該對象鎖。

綜上,所謂喚醒線程,另一種解釋可以說是將線程由等待池移動到鎖池,notifyAll調用后,會將全部線程由等待池移到鎖池,然后參與鎖的競爭,競爭成功則繼續執行,如果不成功則留在鎖池等待鎖被釋放后再次參與競爭。而notify只會喚醒一個線程。

有了這些理論基礎,后面的notify可能會導致死鎖,而notifyAll則不會的例子也就好解釋了

測試代碼

public class TestNotifyNotifyAll { private static Object obj = new Object(); public static void main(String[] args) { //測試 RunnableImplA wait() Thread t1 = new Thread(new RunnableImplA(obj)); Thread t2 = new Thread(new RunnableImplA(obj)); t1.start(); t2.start(); //RunnableImplB notify() Thread t3 = new Thread(new RunnableImplB(obj)); t3.start(); // //RunnableImplC notifyAll()// Thread t4 = new Thread(new RunnableImplC(obj));// t4.start(); } } class RunnableImplA implements Runnable { private Object obj; public RunnableImplA(Object obj) { this.obj = obj; } public void run() { System.out.println('run on RunnableImplA'); synchronized (obj) { System.out.println('obj to wait on RunnableImplA'); try { obj.wait(); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println('obj continue to run on RunnableImplA'); } }} class RunnableImplB implements Runnable { private Object obj; public RunnableImplB(Object obj) { this.obj = obj; } public void run() { System.out.println('run on RunnableImplB'); System.out.println('睡眠3秒...'); try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } synchronized (obj) { System.out.println('notify obj on RunnableImplB'); obj.notify(); } }} class RunnableImplC implements Runnable { private Object obj; public RunnableImplC(Object obj) { this.obj = obj; } public void run() { System.out.println('run on RunnableImplC'); System.out.println('睡眠3秒...'); try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } synchronized (obj) { System.out.println('notifyAll obj on RunnableImplC'); obj.notifyAll(); } }}

結果:僅調用一次 obj.notify(),線程 t1 或 t2 中的一個始終在等待被喚醒,程序不終止

run on RunnableImplAobj to wait on RunnableImplArun on RunnableImplAobj to wait on RunnableImplArun on RunnableImplB睡眠3秒...notify obj on RunnableImplBobj continue to run on RunnableImplA

把 t3 注掉,啟動 t4 線程。調用 obj.notifyAll() 方法

public class TestNotifyNotifyAll { private static Object obj = new Object(); public static void main(String[] args) { //測試 RunnableImplA wait() Thread t1 = new Thread(new RunnableImplA(obj)); Thread t2 = new Thread(new RunnableImplA(obj)); t1.start(); t2.start(); // //RunnableImplB notify()// Thread t3 = new Thread(new RunnableImplB(obj));// t3.start(); //RunnableImplC notifyAll() Thread t4 = new Thread(new RunnableImplC(obj)); t4.start(); } }

結果:t1、t2線程均可以執行完畢

run on RunnableImplAobj to wait on RunnableImplArun on RunnableImplAobj to wait on RunnableImplArun on RunnableImplC睡眠3秒...notifyAll obj on RunnableImplCobj continue to run on RunnableImplAobj continue to run on RunnableImplA

到此這篇關于Java中notify()和notifyAll()的使用區別的文章就介紹到這了,更多相關Java notify()和notifyAll()內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美国产另类| 免费不卡中文字幕在线| 一区二区国产在线| 国产精品腿扒开做爽爽爽挤奶网站| 精品三级久久| 欧美日韩免费看片| 日韩在线综合| 日韩成人亚洲| 亚洲二区视频| 日韩天堂av| 久久视频精品| 国产一区清纯| 在线综合亚洲| 日韩一二三区在线观看| 亚洲精品影视| 欧美日韩精品一区二区三区视频| 久久国产麻豆精品| 久久影院一区二区三区| 国产精品久久久久久久免费观看| 激情黄产视频在线免费观看| 久久久噜噜噜| 黄色国产精品| 亚洲精品日本| 精品一区二区三区在线观看视频| 亚洲精品在线影院| 美女网站一区| 亚洲三级视频| 国产福利一区二区精品秒拍| 国产成人精品一区二区三区在线| 99久久九九| 亚洲一区二区小说| 欧美黑人巨大videos精品| zzzwww在线看片免费| 午夜日韩av| 欧美在线观看天堂一区二区三区| 日产午夜精品一线二线三线| 欧美日韩少妇| 69精品国产久热在线观看| 精品国产18久久久久久二百| 在线日韩中文| 中文字幕成人| 97人人精品| 99国产精品| 国产精品最新| 美女亚洲一区| 国产欧美自拍| 日韩大片在线| 日本一区免费网站| 中文字幕高清在线播放| 国产亚洲精品久久久久婷婷瑜伽| 日本久久一区| 久久人人精品| 国产精品一区二区精品视频观看 | 久久亚洲风情| 免费在线成人| 欧美午夜不卡影院在线观看完整版免费| 日韩高清欧美激情| 九九精品调教| 日韩国产欧美视频| 日韩精品欧美激情一区二区| 日韩av不卡在线观看| 99久久夜色精品国产亚洲狼 | 综合激情婷婷| 91亚洲国产成人久久精品| 爽爽淫人综合网网站| 粉嫩av一区二区三区四区五区| 六月婷婷一区| 久久精品免费看| 亚洲精品精选| 91精品蜜臀一区二区三区在线| 天堂va在线高清一区| 日韩欧美综合| 91国内精品| 日韩视频精品在线观看| 国产精品第一国产精品| 免费视频久久| www成人在线视频| 国产精品欧美一区二区三区不卡| 九九久久电影| 国产精品99视频| 欧美一区自拍| 免费成人在线视频观看| 国产精品二区不卡| 国产亚洲久久| 一区二区亚洲视频| 九九在线精品| 久久夜夜操妹子| 美日韩一区二区三区| 综合在线一区| 亚洲少妇在线| 国产v综合v| 精品国产午夜| 国产精品久久久久77777丨| 久久亚洲欧洲| 欧美精品激情| 久久精品免费一区二区三区| 久久婷婷国产| 国产女人18毛片水真多18精品| 丝袜美腿一区二区三区| 91精品一区国产高清在线gif| 久久av电影| 日本欧美大码aⅴ在线播放| 久久av在线| 狠狠干综合网| 午夜国产精品视频| 激情欧美一区| 精品日韩视频| 欧美一区久久久| 福利欧美精品在线| 成人在线视频区| 国产一区不卡| 国产成人黄色| 精品三级国产| 国产不卡一区| 色综合狠狠操| 日韩理论片av| 免费看av不卡| 亚洲黄色免费av| 色欧美自拍视频| 老牛影视精品| 日韩电影免费网址| 中文字幕系列一区| 久久一区二区中文字幕| 久久久久亚洲| 亚洲高清不卡| 在线一区免费观看| 在线精品观看| 亚洲精品亚洲人成在线观看| 日韩一区二区三区精品视频第3页| 日本不卡一区二区三区| 日韩欧美在线精品| 日韩高清不卡在线| 国产伦精品一区二区三区千人斩| 国产精品嫩模av在线| 久久精品日韩欧美| 日韩精品网站| 中文在线不卡| 日韩黄色av| 精品一区二区三区的国产在线观看 | 亚洲三级视频| 日韩国产91| 国产精品2023| 伊人久久av| 999国产精品永久免费视频app| 色综合www| 鲁大师影院一区二区三区| 最新国产精品久久久| 国产精品一区二区免费福利视频| 精品福利久久久| 国产高清一区| 中文字幕亚洲影视| 日韩成人av影视| 免费一区二区三区在线视频| 天堂中文在线播放| 久久国产精品久久w女人spa| 国产欧美自拍| 四虎884aa成人精品最新| 亚洲深夜福利| 国产精品一级| 久久精品高清| 亚洲精品日韩久久| 国产一区国产二区国产三区 | 香蕉久久久久久久av网站| 日本国产亚洲| 国产精品二区不卡| 亚洲免费精品| 国产精品第一国产精品| 激情欧美一区| 欧美视频二区| 久久久久久黄| 亚洲精品进入| 久久久久久自在自线| 国产亚洲福利| 久久精品女人| 久久午夜影视| 欧美xxxx中国| 一区二区精彩视频| 高清日韩中文字幕| 在线亚洲免费| 国产精品香蕉| 欧美~级网站不卡| 国产日韩视频| 蜜桃视频欧美| 欧美成人精品午夜一区二区| 日本精品在线中文字幕| 日本亚州欧洲精品不卡| 欧美天堂视频| 国产欧美日韩在线一区二区| 久久精品一区二区不卡| 日韩动漫一区| 亚洲二区免费| 国产精品99精品一区二区三区∴| 婷婷成人基地| 国产精品成人自拍| 亚洲激情二区| 麻豆国产精品视频| 免费成人在线观看| 国产麻豆久久| 国产精品对白| 亚洲精品大全|