日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Java多線程死鎖與資源限制操作

瀏覽:40日期:2022-08-23 14:11:37

鎖是個非常有用的工具,運用場景非常多,因為它使用起來非常簡單,而且易于理解。但同時它也會帶來一些困擾,那就是可能會引起死鎖,一旦產生死鎖,就會造成系統功能不可用。

死鎖的概念

那什么是死鎖呢?所謂死鎖: 是指兩個或兩個以上的進程在執行過程中,由于競爭資源或者由于彼此通信而造成的一種阻塞的現象,若無外力作用,它們都將無法推進下去。此時稱系統處于死鎖狀態或系統產生了死鎖,這些永遠在互相等待的進程稱為死鎖進程。

死鎖產生的必要條件

1)互斥條件:指進程對所分配到的資源進行排它性使用,即在一段時間內某資源只由一個進程占用。如果此時還有其它進程請求資源,則請求者只能等待,直至占有資源的進程用畢釋放。

2)請求和保持條件:指進程已經保持至少一個資源,但又提出了新的資源請求,而該資源已被其它進程占有,此時請求進程阻塞,但又對自己已獲得的其它資源保持不放。

3)不剝奪條件:指進程已獲得的資源,在未使用完之前,不能被剝奪,只能在使用完時由自己釋放。

4)環路等待條件:指在發生死鎖時,必然存在一個進程——資源的環形鏈,即進程集合{P0,P1,P2,···,Pn}中的P0正在等待一個P1占用的資源;P1正在等待P2占用的資源,……,Pn正在等待已被P0占用的資源。

死鎖代碼實例

public class DeadLockDemo { private static String A = 'A'; private static String B = 'B'; public static void main(String[] args) { new DeadLockDemo().deadLock(); } /** * 死鎖 * @author fuyuwei * 2017年5月13日 下午9:27:32 */ private void deadLock() { Thread t1 = new Thread(new Runnable() { @SuppressWarnings('static-access') @Override public void run() {synchronized (A) { try { Thread.currentThread().sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } synchronized (B) { System.out.println('1'); }} } }); Thread t2 = new Thread(new Runnable() { @Override public void run() {synchronized (B) { synchronized (A) { System.out.println('2'); }} } }); t1.start(); t2.start(); }}

線程A睡眠2秒之后鎖定B同步打印1,但是這時候B已經被第二個線程鎖定,并且第二天線程又鎖定A打印2,就這樣A等待B但是握著B不放,B等待A但是握著A不放,就產生了死鎖。

當然這段代碼純粹是為了演示死鎖,在實際工作中基本上不會出現這種代碼。在實際工作中線程可能拿到一個數據庫鎖,釋放鎖的時候拋出了異常,沒釋放掉。

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

'Thread-2' prio=5 tid=7fc0458d1000 nid=0x116c1c000 waiting for monitor entry [116c1b000java.lang.Thread.State: BLOCKED (on object monitor)at com.ifeve.book.forkjoin.DeadLockDemo$2.run(DeadLockDemo.java:42)- waiting to lock <7fb2f3ec0> (a java.lang.String)- locked <7fb2f3ef8> (a java.lang.String)at java.lang.Thread.run(Thread.java:695)'Thread-1' prio=5 tid=7fc0430f6800 nid=0x116b19000 waiting for monitor entry [116b18000java.lang.Thread.State: BLOCKED (on object monitor)at com.ifeve.book.forkjoin.DeadLockDemo$1.run(DeadLockDemo.java:31)- waiting to lock <7fb2f3ef8> (a java.lang.String)- locked <7fb2f3ec0> (a java.lang.String)at java.lang.Thread.run(Thread.j

避免死鎖的方法

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

2、避免一個線程在鎖內同時占用多個資源,盡量保證每個鎖只占用一個資源。

3、嘗試使用定時鎖,使用lock.tryLock(timeout)來替代使用內部鎖機制。

4、對于數據庫鎖,加鎖和解鎖必須在一個數據庫連接里,否則會出現解鎖失敗的情況。

什么是資源限制

資源限制是指在進行并發編程時,程序的執行速度受限于計算機硬件資源或軟件資源。例如,服務器的帶寬只有2Mb/s,某個資源的下載速度是1Mb/s每秒,系統啟動10個線程下載資源,下載速度不會變成10Mb/s,所以在進行并發編程時,要考慮這些資源的限制。硬件資源限制有帶寬的上傳/下載速度、硬盤讀寫速度和CPU的處理速度。軟件資源限制有數據庫的連接數和socket連接數等。

資源限制引發的問題

在并發編程中,將代碼執行速度加快的原則是將代碼中串行執行的部分變成并發執行,但是如果將某段串行的代碼并發執行,因為受限于資源,仍然在串行執行,這時候程序不僅不會加快執行,反而會更慢,因為增加了上下文切換和資源調度的時間。例如,之前看到一段程序使用多線程在辦公網并發地下載和處理數據時,導致CPU利用率達到100%,幾個小時都不能運行完成任務,后來修改成單線程,一個小時就執行完成了。

如何解決資源限制的問題

對于硬件資源限制,可以考慮使用集群并行執行程序。既然單機的資源有限制,那么就讓程序在多機上運行。比如使用ODPS、Hadoop或者自己搭建服務器集群,不同的機器處理不同的數據??梢酝ㄟ^“數據ID%機器數”,計算得到一個機器編號,然后由對應編號的機器處理這筆數據。對于軟件資源限制,可以考慮使用資源池將資源復用。比如使用連接池將數據庫和Socket連接復用,或者在調用對方webservice接口獲取數據時,只建立一個連接。

在資源限制情況下進行并發編程

如何在資源限制的情況下,讓程序執行得更快呢?方法就是,根據不同的資源限制調整程序的并發度,比如下載文件程序依賴于兩個資源——帶寬和硬盤讀寫速度。有數據庫操作時,涉及數據庫連接數,如果SQL語句執行非???,而線程的數量比數據庫連接數大很多,則某些線程會被阻塞,等待數據庫連接。

補充知識:初入Java并發-避免死鎖的常見方法

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

2、避免一個線程在鎖內同時占用多個資源,盡量保證每個鎖只占用一個資源

3、嘗試使用定時鎖,使用lock.tryLock(timeout)來替代使用內部鎖機制

4、對于數據庫鎖,加鎖和解鎖必須在一個數據庫連接里,否則會出現解鎖失敗的情況。

以上這篇Java多線程死鎖與資源限制操作就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩中文字幕亚洲一区二区va在线 | 99riav1国产精品视频| 欧美成人基地 | 国产伊人久久| 国产精品大片免费观看| 国产精品分类| 精品一区二区三区免费看| 国产欧美日韩精品一区二区免费| 国产精品亚洲四区在线观看| 国产另类在线| 国产一区二区三区网| 免费看av不卡| 一区在线免费观看| 综合精品一区| 日本aⅴ精品一区二区三区 | 六月婷婷一区| 在线看片日韩| 欧美一级一区| 精品国产aⅴ| 久久精品1区| 99re国产精品| 欧美一区免费| 久久电影tv| 夜夜嗨网站十八久久| 视频在线在亚洲| 国产情侣久久| 色网在线免费观看| 视频一区二区三区在线| 国产欧美日韩一区二区三区四区 | 奇米狠狠一区二区三区| 麻豆精品视频在线| 欧美亚洲在线日韩| 日韩美女精品| 国产在线观看91一区二区三区| 久久久国产精品一区二区中文| 国产亚洲毛片在线| 久久99久久久精品欧美| 欧美成a人免费观看久久| 久久一二三区| 精品国产91| 激情综合亚洲| 日本aⅴ亚洲精品中文乱码 | 亚洲一区二区三区免费在线观看 | 91精品丝袜国产高跟在线| 久久久久久色| 中文字幕在线官网| 蜜臀久久久99精品久久久久久| 欧美国产视频| 亚洲黄页一区| 国产乱码精品一区二区亚洲| 亚洲无线一线二线三线区别av| 蜜臀久久99精品久久久久宅男 | 久久国产99| 精品一区二区三区四区五区| 国产亚洲精品自拍| 国产一区二区三区视频在线| 99视频在线精品国自产拍免费观看| 欧美一区久久| 九一精品国产| 欧美日韩亚洲一区在线观看| 另类中文字幕国产精品| 午夜性色一区二区三区免费视频| 日本久久黄色| 日日夜夜免费精品视频| 日韩视频网站在线观看| 日本午夜精品久久久| 欧美日韩一区二区三区视频播放| 日韩avvvv在线播放| 亚洲成人国产| 麻豆高清免费国产一区| 一区二区精彩视频| 日韩不卡在线| 久久99性xxx老妇胖精品| 亚洲一区国产一区| 精品久久99| 日韩手机在线| 香蕉国产精品| 中文字幕高清在线播放| 日韩精品乱码av一区二区| 国产精品99一区二区| 欧美激情福利| 91亚洲无吗| 久久午夜视频| 欧美影院三区| 国产欧美一区二区三区精品酒店| 日韩黄色av| 欧美专区18| 999国产精品视频| 久久中文字幕一区二区三区| 日韩精品一二区| 亚洲国产日韩欧美在线| 色婷婷狠狠五月综合天色拍| 麻豆精品一区二区综合av| 偷拍亚洲精品| 国产精品色网| 亚洲91精品| 亚洲精品一级二级| 国精品产品一区| 国产精品v一区二区三区| 日韩高清在线一区| 亚洲一区中文| 久久久久一区| 亚洲精品在线影院| 在线人成日本视频| 国产精品久久久一区二区| 日韩不卡一二三区| 日韩一区免费| 日本亚洲视频在线| 亚洲+小说+欧美+激情+另类| 在线观看亚洲精品福利片| 夜夜精品视频| 亚洲一区不卡| 喷白浆一区二区| 日韩中文欧美在线| 日韩专区欧美专区| 亚洲一区二区三区无吗| 一区二区三区四区日韩| 免费不卡在线视频| 免费在线观看视频一区| aa国产精品| 国产精品毛片一区二区三区| 激情91久久| 香蕉精品999视频一区二区| 一区在线免费观看| 中文久久精品| 自拍自偷一区二区三区| 日本 国产 欧美色综合| 蜜臀国产一区二区三区在线播放| 西西人体一区二区| 日韩精品一级二级| 亚洲精品护士| 日韩不卡一二三区| 久久丁香四色| 91视频久久| av资源中文在线| 亚洲www啪成人一区二区| 日韩一区二区三区在线免费观看| 91精品在线观看国产| 午夜精品网站| 免费观看在线综合色| 日韩一二三区在线观看| 国产欧美日韩亚洲一区二区三区| 国产精品美女午夜爽爽| 国精品产品一区| 日韩免费视频| 欧美日韩国产高清| 一区二区三区四区精品视频| 日韩不卡在线观看日韩不卡视频| 国产精品蜜月aⅴ在线| 麻豆精品在线视频| 欧美一级鲁丝片| 欧美精品一二| 亚洲aa在线| 久久99高清| 久久久久美女| 中文在线日韩| 久久精品国产网站| 亚洲a一区二区三区| 手机精品视频在线观看| 国产亚洲高清一区| 中文字幕人成乱码在线观看 | 亚洲久久视频| 国产精品xvideos88| 免费污视频在线一区| 另类激情亚洲| 国产精品亚洲人成在99www| av资源中文在线| 不卡一区2区| 欧美日韩1区| 欧美aa在线观看| 亚洲精选91| 91视频久久| 亚洲欧美久久久| 国产精品久久久久久久久久白浆| 国产91在线播放精品| 国产精品99免费看| 日韩精品成人| 亚洲黄色免费看| 亚洲精品在线国产| 黄色aa久久| 日韩欧美美女在线观看| 国产精品久久久久久久免费观看| av不卡在线看| 久久精品一区二区三区中文字幕| 免费毛片在线不卡| 国产日韩免费| 久久九九国产| 国产精品欧美日韩一区| 久久精品影视| 国产精品密蕾丝视频下载| 欧美1区免费| 国产精品亚洲欧美| 精品日韩视频| 国产麻豆一区二区三区| 午夜国产精品视频免费体验区| 国产精品观看| 视频一区二区不卡| 日本久久成人网| 国产精品入口久久| 日韩中文字幕麻豆|