激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - java-synchronized 嵌套使用代碼詳解

java-synchronized 嵌套使用代碼詳解

2021-01-05 11:20yokasou Java教程

本文以synchronized 的同步造成了死鎖為例,介紹了java-synchronized 嵌套使用代碼詳解,同時對鎖和死鎖的概念進行了說明,需要的朋友可以了解下。

synchronized使用過多時,可能會造成死鎖,那么死鎖到底是怎么一回事呢。先看下面的代碼,實現死鎖

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
<span style="color: #00ff00">//死鎖的實現
</span>classA
{
publicvoidget(){
System.out.println("<span style="color: #3366ff">A說:我開始啟動了,B,給我你的資源</span>");
}
publicvoidsay(){
System.out.println("<span style="color: #3366ff">A獲得資源</span>");
}
}
classB
{
publicvoidget(){
System.out.println("<span style="color: #3366ff">B說:我開始啟動了,A,給我你的資源</span>");
}
publicvoidsay(){
System.out.println("<span style="color: #3366ff">B獲得資源</span>");
}
}
classMyThreadimplementsRunnable
{
publicstaticAa=newA();
publicstaticBb=newB();
publicbooleanflag=false;
publicvoidrun(){
if(flag){
synchronized(a){
a.get();
try{
Thread.sleep(<span style="color: #00ff00">500</span>);
}catch(InterruptedExceptione){}
synchronized(b){ <span style="color: #00ff00">//此</span><span style="color: #00ff00">同步代碼塊在另一同步代碼塊里
</span>a.say();
}
}
}else{
synchronized(b){
b.get();
try{
Thread.sleep(<span style="color: #00ff00">500</span>);
}catch(InterruptedExceptione){}
synchronized(a){ <span style="color: #00ff00">//此同步代碼塊在另一同步代碼塊里
</span>b.say();
}
}
}
}
}
publicclassDemo24
{
publicstaticvoidmain(Stringargs[]){
MyThreadmt1=newMyThread();
MyThreadmt2=newMyThread();
mt1.flag=<span style="color: #3366ff"><strong>true</strong></span>;
mt2.flag=<span style="color: #3366ff"><strong>false</strong></span>;
Threadth1=newThread(mt1);
Threadth2=newThread(mt2);
th1.start();
th2.start();
}
}

以上代碼由于 synchronized 的同步造成了死鎖,死鎖是兩個或多個線程同時等待對方的完成,而程序無法繼續執行。在解釋代碼前,首先要明白synchronized到底是怎么一回事。synchronized 定義同步,那么同步的什么,什么和什么同步了?

首先,我們得知道,什么是。在java中,每一個對象都有一個內部鎖,如果以方法或代碼塊用 synchronized 進行聲明,那么對象的鎖將保護整個方法或代碼塊,要調用這個方法或者執行這個代碼塊,必須獲得這個對象的。而且,任何時候都只能有一個線程對象執行被保護的代碼

在以上代碼中,在線程th1啟動后,他就獲得了a的鎖,同時當其休眠完畢,求會申請獲得b的鎖,而此時,他的a鎖沒有放棄。在線程th2啟動后,他就獲得了b的鎖,同時當其休眠完畢,求會申請獲得a的鎖,而此時,他的b鎖沒有放棄。

兩方都握有自己的鎖不放棄,而同時申請另一方的鎖,所以,此時就造成了死鎖

同步,同步的就是線程和對象,將線程和對象進行綁定,獲取對象的鎖。

注意:通過以上代碼可以發現,死鎖的必要條件是不放棄已有的鎖,而同時申請新鎖。所以,要想實現死鎖,就會有synchronized的嵌套。

這樣才能同時操作兩個以上的鎖,從而造成死鎖。

總結

以上就是本文關于java-synchronized 嵌套使用代碼詳解的全部內容,希望對大家有所幫助。

原文鏈接:https://www.2cto.com/kf/201701/582800.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 美女视频免费一区二区 | 国产午夜精品久久久久久免费视 | 黄污污网站 | 香蕉秀 | 手机免费看一级片 | 国内精品伊人久久久久网站 | 桥本有菜免费av一区二区三区 | 国产刺激高潮av | 91精品国产777在线观看 | 久久人人爽人人爽人人片av高清 | 欧美成人精品一区二区三区 | 欧美特黄a | 久久免费视频一区二区三区 | 七首小情歌泰剧在线播放 | 久久国产精品电影 | 久久久日韩av免费观看下载 | 美国一级黄色毛片 | 日本高清黄色片 | 欧美一级黄色录相 | 久久精品成人影院 | 91精品久久久久久久久久久 | 国产一区二区视频精品 | 中文字幕综合在线观看 | 亚洲精品无码不卡在线播放he | 午夜免费一区 | 海外中文字幕在线观看 | 国产在线精品一区二区三区不卡 | 91av亚洲| 欧美激情综合在线 | 亚洲网站免费观看 | 久毛片| 久久久久久久久久久久久久久久久久 | 九色免费视频 | 激情av在线| av影片在线观看 | 一边吃奶一边插下面 | 国产亚洲精品久久午夜玫瑰园 | 欧美人一级淫片a免费播放 久久99精品久久久久久园产越南 | 经典三级在线视频 | 国产精品久久久久久影院8一贰佰 | 国产精品视频自拍 |