91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java死鎖介紹及避免方法

發布時間:2020-04-22 14:20:02 來源:億速云 閱讀:200 作者:小新 欄目:編程語言

今天小編給大家分享的是java死鎖介紹及避免方法,相信很多人都不太了解,為了讓大家更加了解,所以給大家總結了以下內容,一起往下看吧。一定會有所收獲的哦。

  • 死鎖的介紹:
    鎖是一個非常有用的工具,運行場景非常多,因為它使用起來非常簡單,而且易于理解。但同時它也會帶來一些困擾,比如死鎖問題。比如有兩個線程A和B,運行都需要兩個資源a,b。A獲取了a資源,B獲取了b資源,接著A去請求b資源,B去請求a資源,兩個線程互相阻塞產生死鎖。

  • 代碼示例:

public calss DeadLockDemo{
	private static String A = "A";
	private static String B = "B";
	public static void main(String[] args){
		new DeadLockdemo().deadLock();
	}
	private void deadLock(){
		Thread t1 = new Thread(new Runnable(){
			@Override
			public void run(){
				synchronized(A){
					try{
						Thread.currentThread().sleep(2000);
					}catch(Exception e){
					  e.printStackTrace();
					 }
					 synchronized(B){
					 	System.out.println("B");
					 }
				}
			}
		});
		Thread t2 = new Thread(new Runnable(){
			@Override
			public void run(){
				synchronized(B){
					try{
						Thread.currentThread().sleep(2000);
					}catch(Exception e){
					  e.printStackTrace();
					 }
					 synchronized(A){
					 	System.out.println("A");
					 }
				}
			}
		});
		t1.start();
		t2.start();
	}
}

上述代碼執行后會發生死鎖,t1和t2互相阻塞。

  • 死鎖產生的場景分析:
    在一個更為復雜的場景中,你可能會遇到這樣的問題,t1拿到鎖之后,因為一些異常情況而沒有釋放鎖(死循環)。或者t1拿到了一個數據庫鎖,釋放鎖的時候拋出了異常沒釋放掉。

  • 避免死鎖的幾種方法:
    1.盡量避免一個線程同時獲取多個鎖。
    2.盡量避免一個線程同時占據多個支援,盡量一個線程同時只占據一個資源。
    3.嘗試使用定時鎖。Lock.tryLock(timeout)來代替使用內部鎖機制。
    4.對于數據庫鎖,加鎖和解鎖必須在一個數據庫連接里進行。

關于java死鎖介紹及避免方法就分享到這里了,希望以上內容可以對大家有一定的參考價值,可以學以致用。如果喜歡本篇文章,不妨把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

德令哈市| 砚山县| 沛县| 内黄县| 正阳县| 青田县| 泸定县| 天长市| 博湖县| 从化市| 宁武县| 长寿区| 喀什市| 房山区| 平江县| 永德县| 洛扎县| 泾阳县| 深水埗区| 甘南县| 长垣县| 蕲春县| 金昌市| 呼和浩特市| 乌审旗| 临漳县| 奇台县| 定陶县| 福建省| 循化| 佛教| 红河县| 芦山县| 丽水市| 宜君县| 新野县| 阿图什市| 阳东县| 陵水| 张家港市| 武山县|