国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

java再復習——線程的死鎖問題

2019-11-06 06:53:29
字體:
供稿:網(wǎng)友

使用多線程的時候,除了因為操作共享數(shù)據(jù)帶來的安全問題,還有一個就是因為,為了避免安全問題去使用同步,但是因為同步使用不當而產(chǎn)生的死鎖問題。

例子:

public class DeadLockDemo {	public static void main(String[] args) {		Data data = new Data();		new Thread(new RunnableA(data)).start();		new Thread(new RunnableB(data)).start();	}	}class RunnableA implements Runnable{		Data data;		public RunnableA(Data data){		this.data = data;	}	public void run() {		synchronized(this){			System.out.PRintln(data.i--);			synchronized(data){				System.out.println(data.i--);			}		}	}	}class RunnableB implements Runnable{		Data data;		public RunnableB(Data data){		this.data = data;	}	public void run() {		synchronized(this){			System.out.println(data.i--);			synchronized(data){				System.out.println(data.i--);			}		}	}	}class Data {	public int i = 100;}

發(fā)生死鎖的原因:

同步代碼塊的嵌套。同步代碼塊互相嵌套會發(fā)生互相所要鎖的問題,如果一個線程拿到了A鎖等B鎖,另一個線程拿到了B鎖等A鎖,那么程序就會堵死,執(zhí)行不下去,這就是死鎖。

上面的例子舉的不是很好。因為死鎖這問題,在編寫多線程的時候規(guī)范,一般不會出現(xiàn)的。就算出現(xiàn)了,知道原因,根據(jù)原因去查哪里寫的不規(guī)范就可以了。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 中牟县| 井陉县| 盐津县| 吉安县| 南岸区| 塘沽区| 田东县| 乐至县| 长治县| 鄂尔多斯市| 秦皇岛市| 斗六市| 米林县| 洞口县| 腾冲县| 土默特右旗| 藁城市| 司法| 屏东县| 泰州市| 兴国县| 保德县| 任丘市| 安乡县| 宁都县| 肇庆市| 阜新| 玛多县| 五大连池市| 靖宇县| 通山县| 衡山县| 滨州市| 宝清县| 梧州市| 陵水| 兴和县| 团风县| 长兴县| 达拉特旗| 武宁县|