欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java避免死鎖的常見方法代碼解析

 更新時間:2018年01月02日 11:19:37   作者:聽說你在這里  
這篇文章主要介紹了java避免死鎖的常見方法代碼解析,具有一定借鑒價值,需要的朋友可以參考下

死鎖

索是一個非常有用的工具,運用場景非常多,因為它使用起來非常簡單,而且易于理解。但同時它也會帶來一些困擾,那就是可能會引起死鎖,一旦產(chǎn)生死鎖,就會造成系統(tǒng)功能不可用。讓我們先來看一段代碼,這段代碼會引起死鎖,使線程 thread_1 和線程 thread_2 互相等待對方釋放鎖。

package thread;
public class DeadLockDemo {
	private static String A = "A";
	private static String B = "B";
	public static void main(String args[]) {
		new DeadLockDemo().deadLock();
	}
	private void deadLock() {
		// 線程thread_1 
		Thread thread_1 = new Thread(new Runnable() {
			@Override 
			   public void run() {
				synchronized (A) {
					System.err.println("--thread_1 lock A----");
					synchronized (B) {
						System.err.println("--thread_1 lock B----");
					}
				}
			}
		}
		);
		// 線程thread_2 
		Thread thread_2 = new Thread(new Runnable() {
			@Override 
			   public void run() {
				synchronized (B) {
					System.out.println("--thread_2 lock B----");
					synchronized (A) {
						System.out.println("--thread_2 lock A----");
					}
				}
			}
		}
		);
		thread_1.start();
		thread_2.start();
	}
}

這段代碼只是演示死鎖的場景,在現(xiàn)實中你可能不會寫出這樣的代碼。但是在一些更為復雜的場景中,你可能會遇到這樣的問題,比如 thread_1 拿到索之后,因為一些異常情況沒有釋放索(死循環(huán))。又或者是 thread_1 拿到一個數(shù)據(jù)庫索,釋放鎖的時候拋出了異常,沒釋放掉。

一旦出現(xiàn)死鎖,業(yè)務是可感知的,因為不能繼續(xù)提供服務了,那么只能通過dump 線程查看到底是哪個線程出現(xiàn)了問題,以下線程信息告訴我們是 DeadLockDemo類的第 35 行和21行引起了死鎖。

"Thread-1" prio=6 tid=0x000000000cb13800 nid=0x19ac waiting for monitor entry [0 
x000000000d67f000] 
 java.lang.Thread.State: BLOCKED (on object monitor) 
  at thread.DeadLockDemo$2.run(DeadLockDemo.java:35) 
  - waiting to lock <0x00000007d5a9be88> (a java.lang.String) 
  - locked <0x00000007d5a9beb8> (a java.lang.String) 
  at java.lang.Thread.run(Unknown Source) 
 
"Thread-0" prio=6 tid=0x000000000cb0e800 nid=0x6bc waiting for monitor entry [0x 
000000000d48f000] 
 java.lang.Thread.State: BLOCKED (on object monitor) 
  at thread.DeadLockDemo$1.run(DeadLockDemo.java:21) 
  - waiting to lock <0x00000007d5a9beb8> (a java.lang.String) 
  - locked <0x00000007d5a9be88> (a java.lang.String) 
  at java.lang.Thread.run(Unknown Source) 

避免死鎖的幾個常見方法。

避免一個線程同時獲取多個鎖。

避免一個線程在索內(nèi)同時占用多個資源,盡量保證每個索只占用一個資源。

嘗試使用定時索,使用 lock.tryLock(timeout) 來替代使用內(nèi)部索機制。

對于數(shù)據(jù)庫索,加鎖和解鎖必須在一個數(shù)據(jù)庫連接里,否則會出現(xiàn)解鎖失敗的情況。

referance:

http://www.dbjr.com.cn/article/131946.htm

http://www.dbjr.com.cn/article/131943.htm

總結(jié)

以上就是本文關于java避免死鎖的常見方法代碼解析的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!

相關文章

  • 如何用java編寫微信小程序消息提醒推送

    如何用java編寫微信小程序消息提醒推送

    最近參與開發(fā)的項目有用到微信模板消息推送,在這離記錄一下,下面這篇文章主要給大家介紹了關于如何用java編寫微信小程序消息提醒推送的相關資料,需要的朋友可以參考下
    2023-11-11
  • MybatisPlus開啟二級緩存的方法詳解

    MybatisPlus開啟二級緩存的方法詳解

    這篇文章主要介紹了MybatisPlus開啟二級緩存的方法詳解,二級緩存是基于mapper文件的namespace級別,也就是說多個sqlSession可以共享一個mapper中的二級緩存區(qū)域,需要的朋友可以參考下
    2023-11-11
  • idea?intellij快速修復if語句缺少大括號的問題

    idea?intellij快速修復if語句缺少大括號的問題

    這篇文章主要介紹了idea?intellij快速修復if語句缺少大括號的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • JavaWeb如何實現(xiàn)統(tǒng)一查詢接口(jfinal)

    JavaWeb如何實現(xiàn)統(tǒng)一查詢接口(jfinal)

    這篇文章主要介紹了JavaWeb如何實現(xiàn)統(tǒng)一查詢接口(jfinal),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-06-06
  • Java中如何動態(tài)創(chuàng)建接口的實現(xiàn)方法

    Java中如何動態(tài)創(chuàng)建接口的實現(xiàn)方法

    這篇文章主要介紹了Java中如何動態(tài)創(chuàng)建接口的實現(xiàn)方法的相關資料,需要的朋友可以參考下
    2017-09-09
  • Java中try-catch的使用及注意細節(jié)

    Java中try-catch的使用及注意細節(jié)

    現(xiàn)在有很多的語言都支持try-catch,比如常見的就是c++,java等,這篇文章主要給大家介紹了關于Java中try-catch的使用及注意細節(jié)的相關資料,文中通過圖文以及實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-06-06
  • 關于springboot配置druid數(shù)據(jù)源不生效問題(踩坑記)

    關于springboot配置druid數(shù)據(jù)源不生效問題(踩坑記)

    今天日常跟著網(wǎng)課學習,學到了整合druid數(shù)據(jù)源,遇到了好幾個坑,希望這篇文章可以幫助一些和我一樣踩坑的人
    2021-09-09
  • 一文講解如何優(yōu)雅的調(diào)試jar包

    一文講解如何優(yōu)雅的調(diào)試jar包

    在現(xiàn)實開發(fā)過程中,現(xiàn)場環(huán)境永遠比開發(fā)環(huán)境復雜,下面這篇文章主要給大家介紹了關于如何優(yōu)雅的調(diào)試jar包的相關資料,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2022-03-03
  • 關于ApplicationContext的三個常用實現(xiàn)類

    關于ApplicationContext的三個常用實現(xiàn)類

    這篇文章主要介紹了關于ApplicationContext的三個常用實現(xiàn)類,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • SpringBoot接口防重復提交的三種解決方案

    SpringBoot接口防重復提交的三種解決方案

    在Web開發(fā)中,防止用戶重復提交表單是一個常見的需求,用戶可能會因為網(wǎng)絡延遲、誤操作等原因多次點擊提交按鈕,導致后臺接收到多個相同的請求,本文將介紹幾種在Spring Boot中實現(xiàn)接口防重復提交的方法,需要的朋友可以參考下
    2024-11-11

最新評論