java死鎖介紹及避免方法

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

創(chuàng)新互聯(lián)建站專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都做網(wǎng)站、網(wǎng)站設(shè)計、外貿(mào)營銷網(wǎng)站建設(shè)、山陽網(wǎng)絡(luò)推廣、小程序制作、山陽網(wǎng)絡(luò)營銷、山陽企業(yè)策劃、山陽品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎;創(chuàng)新互聯(lián)建站為所有大學(xué)生創(chuàng)業(yè)者提供山陽建站搭建服務(wù),24小時服務(wù)熱線:13518219792,官方網(wǎng)址:muchs.cn

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

  • 代碼示例:

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();
	}
}

上述代碼執(zhí)行后會發(fā)生死鎖,t1和t2互相阻塞。

  • 死鎖產(chǎn)生的場景分析:
    在一個更為復(fù)雜的場景中,你可能會遇到這樣的問題,t1拿到鎖之后,因為一些異常情況而沒有釋放鎖(死循環(huán))?;蛘遲1拿到了一個數(shù)據(jù)庫鎖,釋放鎖的時候拋出了異常沒釋放掉。

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

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

網(wǎng)站標(biāo)題:java死鎖介紹及避免方法
文章起源:http://muchs.cn/article8/ihicop.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供做網(wǎng)站、Google、網(wǎng)站建設(shè)、網(wǎng)站導(dǎo)航小程序開發(fā)、外貿(mào)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名