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

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

基于Java信號(hào)量解決死鎖過(guò)程解析

瀏覽:37日期:2022-08-22 16:09:17

死鎖在多線程的情況下,會(huì)出現(xiàn)數(shù)據(jù)不同步情況, 而為了避免這種情況,之前也說(shuō)了:界區(qū)實(shí)現(xiàn)方法有兩種,一種是用synchronized,一種是用Lock顯式鎖實(shí)現(xiàn)。

而如果不恰當(dāng)?shù)氖褂昧随i,且出現(xiàn)同時(shí)要鎖多個(gè)對(duì)象時(shí),會(huì)出現(xiàn)死鎖情況,如下:

package lockTest;import java.util.Date;/** * 崔素強(qiáng) * @author cuisuqiang@163.com */public class LockTest {public static String obj1 = 'obj1';public static String obj2 = 'obj2';public static void main(String[] args) {LockA la = new LockA();new Thread(la).start();LockB lb = new LockB();new Thread(lb).start();}}class LockA implements Runnable{public void run() {try {System.out.println(new Date().toString() + ' LockA 開(kāi)始執(zhí)行');while(true){synchronized (LockTest.obj1) {System.out.println(new Date().toString() + ' LockA 鎖住 obj1');Thread.sleep(3000); // 此處等待是給B能鎖住機(jī)會(huì)synchronized (LockTest.obj2) {System.out.println(new Date().toString() + ' LockA 鎖住 obj2');Thread.sleep(60 * 1000); // 為測(cè)試,占用了就不放}}}} catch (Exception e) {e.printStackTrace();}}}class LockB implements Runnable{public void run() {try {System.out.println(new Date().toString() + ' LockB 開(kāi)始執(zhí)行');while(true){synchronized (LockTest.obj2) {System.out.println(new Date().toString() + ' LockB 鎖住 obj2');Thread.sleep(3000); // 此處等待是給A能鎖住機(jī)會(huì)synchronized (LockTest.obj1) {System.out.println(new Date().toString() + ' LockB 鎖住 obj1');Thread.sleep(60 * 1000); // 為測(cè)試,占用了就不放}}}} catch (Exception e) {e.printStackTrace();}}}

看打印:

Mon Mar 31 10:52:38 CST 2014 LockA 開(kāi)始執(zhí)行 Mon Mar 31 10:52:38 CST 2014 LockA 鎖住 obj1 Mon Mar 31 10:52:38 CST 2014 LockB 開(kāi)始執(zhí)行 Mon Mar 31 10:52:38 CST 2014 LockB 鎖住 obj2

A鎖住了B需要的,B鎖住了A需要的,此時(shí)死鎖產(chǎn)生。

為了解決這個(gè)問(wèn)題,我們不使用顯示的去鎖

信號(hào)量可以控制資源能被多少線程訪問(wèn),這里我們指定只能被一個(gè)線程訪問(wèn),就做到了類(lèi)似鎖住。而信號(hào)量可以指定去獲取的超時(shí)時(shí)間,我們可以根據(jù)這個(gè)超時(shí)時(shí)間,去做一個(gè)額外處理。

對(duì)于無(wú)法成功獲取的情況,一般就是重復(fù)嘗試,或指定嘗試的次數(shù),也可以馬上退出。

來(lái)看下如下代碼:

package lockTest;import java.util.Date;import java.util.concurrent.Semaphore;import java.util.concurrent.TimeUnit;/** * 崔素強(qiáng) * @author cuisuqiang@163.com */public class UnLockTest {public static String obj1 = 'obj1';public static final Semaphore a1 = new Semaphore(1);public static String obj2 = 'obj2';public static final Semaphore a2 = new Semaphore(1);public static void main(String[] args) {LockAa la = new LockAa();new Thread(la).start();LockBb lb = new LockBb();new Thread(lb).start();}}class LockAa implements Runnable {public void run() {try {System.out.println(new Date().toString() + ' LockA 開(kāi)始執(zhí)行');while (true) {if (UnLockTest.a1.tryAcquire(1, TimeUnit.SECONDS)) {System.out.println(new Date().toString() + ' LockA 鎖住 obj1');if (UnLockTest.a2.tryAcquire(1, TimeUnit.SECONDS)) {System.out.println(new Date().toString() + ' LockA 鎖住 obj2');Thread.sleep(60 * 1000); // do something}else{System.out.println(new Date().toString() + 'LockA 鎖 obj2 失敗');}}else{System.out.println(new Date().toString() + 'LockA 鎖 obj1 失敗');}UnLockTest.a1.release(); // 釋放UnLockTest.a2.release();Thread.sleep(1000); // 馬上進(jìn)行嘗試,現(xiàn)實(shí)情況下do something是不確定的}} catch (Exception e) {e.printStackTrace();}}}class LockBb implements Runnable {public void run() {try {System.out.println(new Date().toString() + ' LockB 開(kāi)始執(zhí)行');while (true) {if (UnLockTest.a2.tryAcquire(1, TimeUnit.SECONDS)) {System.out.println(new Date().toString() + ' LockB 鎖住 obj2');if (UnLockTest.a1.tryAcquire(1, TimeUnit.SECONDS)) {System.out.println(new Date().toString() + ' LockB 鎖住 obj1');Thread.sleep(60 * 1000); // do something}else{System.out.println(new Date().toString() + 'LockB 鎖 obj1 失敗');}}else{System.out.println(new Date().toString() + 'LockB 鎖 obj2 失敗');}UnLockTest.a1.release(); // 釋放UnLockTest.a2.release();Thread.sleep(10 * 1000); // 這里只是為了演示,所以tryAcquire只用1秒,而且B要給A讓出能執(zhí)行的時(shí)間,否則兩個(gè)永遠(yuǎn)是死鎖}} catch (Exception e) {e.printStackTrace();}}}

看打印情況:

Mon Mar 31 10:57:07 CST 2014 LockA 開(kāi)始執(zhí)行 Mon Mar 31 10:57:07 CST 2014 LockB 開(kāi)始執(zhí)行 Mon Mar 31 10:57:07 CST 2014 LockB 鎖住 obj2 Mon Mar 31 10:57:07 CST 2014 LockA 鎖住 obj1 Mon Mar 31 10:57:08 CST 2014LockB 鎖 obj1 失敗 Mon Mar 31 10:57:08 CST 2014LockA 鎖 obj2 失敗 Mon Mar 31 10:57:09 CST 2014 LockA 鎖住 obj1 Mon Mar 31 10:57:09 CST 2014 LockA 鎖住 obj2

第一次兩個(gè)線程獲取信號(hào)量時(shí)都會(huì)失敗,因?yàn)槭『驜等待時(shí)間長(zhǎng),所以A再次嘗試時(shí)會(huì)成功。

實(shí)際中,你執(zhí)行任務(wù)內(nèi)容不同,所需時(shí)間是不同的。另外不同的線程,對(duì)于獲取信號(hào)量失敗的處理也可能是不同的。所以,雖然不會(huì)產(chǎn)生死鎖,但是你要根據(jù)實(shí)際情況,來(lái)編寫(xiě)獲取失敗后的處理機(jī)制。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Java
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
色天使综合视频| 国产毛片一区二区三区| 综合欧美精品| 麻豆精品久久久| 四虎8848精品成人免费网站| 国产精品一区二区三区www| 久久精品播放| 黄在线观看免费网站ktv| 欧美成人午夜| 日韩一区二区三区四区五区| 午夜亚洲一区| 中文字幕在线高清| 婷婷五月色综合香五月| 国产一区调教| 亚洲精品中文字幕99999| 日本强好片久久久久久aaa| se01亚洲视频 | 久久精品97| 日韩视频一区| 久久久水蜜桃av免费网站| 激情91久久| 国产精品尤物| 日韩一区二区三区在线看| 久久人人99| 高清久久精品| 国产美女视频一区二区| 国产一区国产二区国产三区| 高清日韩中文字幕| 色偷偷偷在线视频播放| 国产美女亚洲精品7777| 四虎精品一区二区免费| 日本不卡一区二区三区| 亚洲精品观看| 亚洲一区av| 亚洲v天堂v手机在线| 免费日韩精品中文字幕视频在线| 免费一区二区三区在线视频| 国产精品亚洲欧美日韩一区在线 | 在线一区免费观看| 日韩视频二区| 精品一区二区三区中文字幕视频 | 夜夜精品视频| 99久久久久久中文字幕一区| 国产精品视频一区二区三区四蜜臂| 国产欧美欧美| 欧美日韩亚洲一区三区| 日韩伦理一区| 日韩高清在线观看一区二区| 国产精品亚洲片在线播放| 国产福利资源一区| 亚洲精品一级| 日本一区二区三区中文字幕| 精品久久在线| 国产综合亚洲精品一区二| 精品91久久久久| 麻豆成人综合网| 美女av在线免费看| 蜜桃免费网站一区二区三区| 国产一区欧美| 久久精品网址| 亚洲国产成人精品女人| 美女精品在线| 蜜臀av国产精品久久久久| 精品视频91| 日韩三区免费| 亚洲精品影院在线观看| 蜜臀久久久99精品久久久久久| 老司机免费视频一区二区| 神马午夜在线视频| 尤物精品在线| 国产精品对白久久久久粗| 另类综合日韩欧美亚洲| 亚洲欧美日韩视频二区| 国产精品videossex| 青青青国产精品| 狠狠久久婷婷| 日韩一区自拍| 五月天久久777| 欧美日韩精品免费观看视频完整| 欧美成人精品| 欧美丰满日韩| 国产一级一区二区| 亚洲人亚洲人色久| 日韩不卡一区二区| 麻豆精品一区二区综合av| 国产va免费精品观看精品视频| 久草免费在线视频| 亚洲综合另类| 免费成人在线观看| 国产福利资源一区| 亚洲网站视频| 日韩精品第一| 日韩欧美综合| 亚洲精品动态| 欧美激情另类| 亚洲人成网站在线在线观看| 国精品产品一区| 久久成人一区| 中文在线а√天堂| 中文字幕av亚洲精品一部二部| 国产日产精品_国产精品毛片| 精品捆绑调教一区二区三区| 巨乳诱惑日韩免费av| 国产精品一区三区在线观看| 国产亚洲精品美女久久| 日本成人精品| 午夜久久av| 日韩欧美中文字幕一区二区三区| 国精品一区二区| 国产视频一区二| 国产精品传媒麻豆hd| 国产欧美在线| 久久中文精品| 日韩一区自拍| 国产精品一二| 视频国产精品| 亚洲精品伦理| 日韩中文字幕无砖| 99精品一区| 色一区二区三区| 免费视频一区二区三区在线观看| 免播放器亚洲| 亚洲一区二区三区高清| 极品日韩av| 性欧美xxxx免费岛国不卡电影| 97精品在线| 麻豆久久一区| 成人国产精品一区二区免费麻豆| 国产欧美三级| 国产精品第一| 国产成人调教视频在线观看| 美女精品视频在线| 高清日韩欧美| 中文字幕在线官网| 视频福利一区| 国产精品美女久久久| 日韩精品免费视频一区二区三区| 日韩免费精品| 国产亚洲一卡2卡3卡4卡新区| 国产欧美二区| 欧美综合社区国产| 免费国产亚洲视频| 日本久久二区| 欧美亚洲国产一区| 日韩精品一级| 成人精品动漫一区二区三区| 免费污视频在线一区| 欧美激情在线精品一区二区三区| 国产一区久久| 精品1区2区3区4区| 国产精品igao视频网网址不卡日韩 | 亚洲精品激情| 国产不卡人人| 亚洲作爱视频| 亚洲精品第一| 91欧美在线| 亚州av日韩av| 亚洲成av在线| 欧美日韩夜夜| 免费精品视频| a国产在线视频| 国产美女一区| 久久久久免费| 国产伦精品一区二区三区视频| 欧美二三四区| 久久gogo国模啪啪裸体| 日韩中文字幕亚洲一区二区va在线| 国产精品白浆| 午夜在线播放视频欧美| 裤袜国产欧美精品一区| 国产图片一区| 久久香蕉精品| 欧美va天堂在线| 国产中文在线播放| 亚洲一区二区网站| 日韩美女一区二区三区在线观看| 视频一区视频二区中文| 久久九九国产| 伊人久久高清| 日韩深夜视频| 日韩久久精品| 超碰在线99| 久久精品免费看| 久久香蕉网站| 国产激情综合| 麻豆精品新av中文字幕| 国产精品chinese| 欧美韩一区二区| 精品三级久久久| 国产一区二区三区四区五区传媒| 欧美激情综合| 国产美女视频一区二区| 91成人在线网站| 国产日韩亚洲| 国产中文在线播放| 国产伦久视频在线观看| 日韩中文字幕高清在线观看| 日韩中文视频| 亚洲二区三区不卡| 亚洲激情国产|