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

您的位置:首頁技術(shù)文章
文章詳情頁

不要重新分配被鎖定對象的對象引用

瀏覽:148日期:2024-07-20 17:21:59
內(nèi)容: synchronized 關(guān)鍵字鎖定對象。對象是在 synchronized 代碼內(nèi)部被鎖定的,這一點(diǎn)對此對象以及您對其對象引用所作的更改意味著什么呢?對一個(gè)對象作同步處理只鎖定該對象。但是,必須注意不要重新分配被鎖定對象的對象引用。那么如果這樣做會(huì)發(fā)生什么情況呢?請考慮下面這段代碼,它實(shí)現(xiàn)了一個(gè) Stack:class Stack{private int StackSize = 10;private int[] intArr = new int[stackSize];private int index; //Stack 中的下一個(gè)可用位置。public void push(int val){synchronized(intArr) {//如果已滿,則重新分配整數(shù)數(shù)組(即我們的 Stack)。if (index == intArr.length){stackSize *= 2;int[] newintArr == new int[stackSize];System.arraycopy(intArr, 0, newintArr, 0, intArr.length);intArr = newintArr;}intArr[index] == val;index++;}}public int pop(){int retval;synchronized(intArr) {if (index> 0){retval = intArr[index-1]; //檢索值,index--; //并使 Stack 減少 1 個(gè)值。return retval;}}throw new EmptyStackException();}//...}這段代碼用數(shù)組實(shí)現(xiàn)了一個(gè) Stack。創(chuàng)建了一個(gè)初始大小為 10 的數(shù)組來容納整數(shù)值。此類實(shí)現(xiàn)了 push 和 pop 方法來模擬 Stack 的使用。在 push 方法中,如果數(shù)組中沒有更多的空間來容納壓入的值,則數(shù)組被重新分配以創(chuàng)建更多的存儲(chǔ)空間。(故意沒有用 Vector 來實(shí)現(xiàn)這個(gè)類。Vector 中不能儲(chǔ)存基本類型。)請注意,這段代碼是要由多個(gè)線程進(jìn)行訪問的。push 和 pop 方法每次對該類的共享實(shí)例數(shù)據(jù)的訪問都是在 synchronized 塊內(nèi)完成的。這樣就保證了多個(gè)線程不能并發(fā)訪問此數(shù)組而生成不正確的結(jié)果。這段代碼有一個(gè)主要的缺點(diǎn)。它對整數(shù)數(shù)組對象作了同步處理,而這個(gè)數(shù)組被 Stack 類的 intArr 所引用。當(dāng) push 方法重新分配此整數(shù)數(shù)組時(shí),這個(gè)缺點(diǎn)就會(huì)顯露出來。當(dāng)這種情況發(fā)生時(shí),對象引用 intArr 被重新指定為引用一個(gè)新的、更大的整數(shù)數(shù)組對象。請注意,這是在 push 方法的 synchronized 塊執(zhí)行期間發(fā)生的。此塊針對 intArr 變量引用的對象進(jìn)行了同步處理。因此,在這段代碼內(nèi)鎖定的對象不再被使用。請考慮以下的事件序列:線程 1 調(diào)用 push 方法并獲得 intArr 對象的鎖。線程 1 被線程 2 搶先。線程 2 調(diào)用 pop 方法。此方法因試圖獲取當(dāng)前線程 1 在 push 方法中持有的同一個(gè)鎖而阻塞。線程 1 重新獲得控制并重新分配數(shù)組。intArr 變量現(xiàn)在引用一個(gè)不同的變量。push 方法退出并釋放它對原來的 intArr 對象的鎖。線程 1 再次調(diào)用 push 方法并獲得新 intArr 對象的鎖。線程 1 被線程 2 搶先。線程 2 獲得舊 intArr 對象的對象鎖并試圖訪問其內(nèi)存。現(xiàn)在線程 1 持有由 intArr 引用的新對象的鎖,線程 2 持有由 intArr 引用的舊對象的鎖。因?yàn)閮蓚€(gè)線程持有不同的鎖,所以它們可以并發(fā)執(zhí)行 synchronized push 和 pop 方法,從而導(dǎo)致錯(cuò)誤。很明顯,這不是所希望的結(jié)果。這個(gè)問題是因 push 方法重新分配被鎖定對象的對象引用而造成的。當(dāng)某個(gè)對象被鎖定時(shí),其他線程可能在同一個(gè)對象鎖上被阻塞。如果將被鎖定對象的對象引用重新分配給另一個(gè)對象,其他線程的掛起鎖則是針對代碼中已不再相關(guān)的對象的。您可以這樣修正這段代碼,去掉對 intArr 變量的同步,而對 push 和 pop 方法進(jìn)行同步。通過將 synchronized 關(guān)鍵字添加為方法修飾符即可實(shí)現(xiàn)這一點(diǎn)。正確的代碼如下所示:class Stack{//與前面相同...public synchronized void push(int val){//如果為空,則重新分配整數(shù)數(shù)組(即我們的 Stack)。if (index == intArr.length){stackSize *= 2;int[] newintArr = new int[stackSize];System.arraycopy(intArr, 0, newintArr, 0, intArr.length);intArr = newintArr;}intArr[index]= val;index++;}public synchronized int pop(){int retval;if (index> 0){retval = intArr[index-1];index--;return retval;}throw new EmptyStackException();}}這個(gè)修改更改了實(shí)際上獲取的鎖。獲取的鎖是針對為其調(diào)用方法的對象的,而不是鎖定 intArr 變量所引用的對象。因?yàn)楂@取的鎖不再針對 intArr 所引用的對象,所以允許代碼重新指定 intArr 對象引用。作者簡介 Peter Haggar 是 IBM 的高級(jí)軟件工程師。他目前正在研究新興的 Java 和因特網(wǎng)技術(shù),并且是 IBM 實(shí)時(shí) Java 參考實(shí)現(xiàn)的項(xiàng)目主持人。他有豐富的編程經(jīng)驗(yàn),從事過開發(fā)工具、類庫和操作系統(tǒng)等方面的工作。在許多行業(yè)研討會(huì)上,他也經(jīng)常就 Java 和其他技術(shù)作技術(shù)性發(fā)言。他于 1987 年在紐約獲得 Clarkson 大學(xué)計(jì)算機(jī)科學(xué)學(xué)士學(xué)位。可以通過 haggar@us.ibm.com 與他聯(lián)系。出處 IBM DW Java, java, J2SE, j2se, J2EE, j2ee, J2ME, j2me, ejb, ejb3, JBOSS, jboss, spring, hibernate, jdo, struts, webwork, ajax, AJAX, mysql, MySQL, Oracle, Weblogic, Websphere, scjp, scjd
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
黑森林国产精品av| 男女激情视频一区| 国产精品玖玖玖在线资源| 亚洲精品伊人| 最新亚洲国产| 日本成人在线网站| 国产乱人伦丫前精品视频| 久久99久久久精品欧美| 精品视频自拍| 伊人久久高清| 免费在线小视频| 久久亚洲成人| 国产视频一区欧美| 日韩欧美高清一区二区三区| 国产精品亚洲综合久久| 精品中文在线| 99精品在线观看| 六月丁香综合| 青草久久视频| 精品久久久网| 2023国产精品久久久精品双| 丝袜a∨在线一区二区三区不卡| 亚洲精品自拍| 久久gogo国模啪啪裸体| 精品视频一区二区三区在线观看 | 国产福利亚洲| 国产传媒在线观看| 亚洲午夜一级| 视频一区中文字幕精品| 久久免费精品| 亚洲二区三区不卡| 日韩极品在线观看| 国产成人精品免费视| 国产一区久久| 青青草91久久久久久久久| 卡一卡二国产精品| 九九久久电影| 日韩国产在线一| 成人国产精品一区二区免费麻豆| 欧美aa一级| 婷婷视频一区二区三区| 捆绑调教美女网站视频一区| 亚洲v在线看| 91欧美极品| 亚洲va在线| 欧美中文高清| 久久五月天小说| 欧美在线黄色| 久久精品国产大片免费观看| 日韩毛片网站| 日韩在线看片| 午夜亚洲福利| 超碰在线99| 亚洲一二av| av免费不卡国产观看| 免费国产亚洲视频| 麻豆高清免费国产一区| 国产精品嫩草99av在线| 麻豆精品视频在线| 久久国产99| av综合电影网站| 日韩激情综合| 久久高清免费| 国产毛片精品| 亚洲欧美日韩一区在线观看| 国产一区二区三区成人欧美日韩在线观看| 中文一区在线| 国产精品成人a在线观看| 免费日本视频一区| 日韩深夜视频| 国产精品入口久久| 亚洲欧美日本日韩| 亚洲精品福利电影| 91九色综合| 亚洲欧洲一区二区天堂久久| 久久99偷拍| 中文字幕乱码亚洲无线精品一区| 亚洲精品国产嫩草在线观看| 国产精品任我爽爆在线播放| 蜜臀久久久久久久| 亚洲不卡系列| 麻豆91在线播放| 亚洲伊人影院| 蜜桃tv一区二区三区| 精品三级av| 国产日产一区| 热久久国产精品| japanese国产精品| 九九精品调教| 国产精品99一区二区三| 国产欧美丝祙| 亚洲精品伦理| 亚洲自啪免费| 亚洲精品一二三区区别| 中文字幕在线看片| 精品一区二区三区在线观看视频| 日本成人在线不卡视频| 夜夜嗨网站十八久久| 精精国产xxxx视频在线播放 | 婷婷丁香综合| 日韩久久视频| 欧美xxxx中国| 精品91福利视频| 捆绑调教美女网站视频一区| 欧美久久香蕉| 日韩av在线免费观看不卡| 一区二区三区午夜视频| 国产毛片久久| 亚洲精品888| 国产99精品| 日韩福利一区| 日韩国产一区| 日韩一区二区三区免费播放| 成人精品国产亚洲| 成人午夜亚洲| 福利欧美精品在线| 成人在线视频区| 国产成人精品免费视| 精品亚洲成人| sm久久捆绑调教精品一区| 国模大尺度视频一区二区| 九九九精品视频| 国产aⅴ精品一区二区三区久久| 国内一区二区三区| 国产精品99一区二区三| 久久亚洲黄色| av中文字幕在线观看第一页 | 天堂va欧美ⅴa亚洲va一国产| 亚洲欧美日韩国产| 美国三级日本三级久久99| 免费看精品久久片| 日日夜夜免费精品视频| 欧美亚洲免费| 国产精品一区二区99| 美女精品久久| 成人黄色av| 久久一区二区三区喷水| 欧美粗暴jizz性欧美20| 99在线精品视频在线观看| 一级欧美视频| 国产精品流白浆在线观看| 国产成人精选| 欧美亚洲国产激情| 蜜臀精品久久久久久蜜臀| 婷婷综合福利| 国产精品极品| 麻豆视频在线观看免费网站黄 | 亚洲黄色免费看| 宅男在线一区| 蜜臀av性久久久久蜜臀aⅴ四虎| 日本一区中文字幕| 热久久久久久| 国产精品成人a在线观看| 丝袜av一区| 国产一区白浆| 清纯唯美亚洲综合一区| 精品理论电影在线| 激情久久五月| 天堂va在线高清一区| 久久99精品久久久野外观看| 天堂√8在线中文| 亚洲中午字幕| 国产精品成人3p一区二区三区| sm捆绑调教国产免费网站在线观看| 激情综合自拍| 欧美伊人影院| 欧美韩日一区| 亚洲资源av| 久久av免费看| 久久伦理在线| 日韩激情一区二区| 91视频精品| 免费国产自线拍一欧美视频| 国产日产一区| 激情婷婷久久| 国产高清亚洲| 亚洲黄页一区| 国产图片一区| 久久三级福利| 日韩和欧美一区二区| 日韩在线高清| 亚洲一区有码| 国产中文欧美日韩在线| 午夜一级在线看亚洲| 麻豆精品在线视频| 午夜一级在线看亚洲| 精品一区二区三区视频在线播放| 99亚洲视频| 精品视频在线一区二区在线| 国产亚洲精品v| 久久久久久久欧美精品| 国产亚洲永久域名| 国产精品久久久久久妇女| 久久久久网站| 欧美一级二级视频| 婷婷中文字幕一区| 国精品产品一区| 日韩成人午夜精品| 久久在线免费| 精品亚洲成人|