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

java 多線程死鎖詳解及簡單實例

 更新時間:2017年01月18日 15:07:45   投稿:lqh  
這篇文章主要介紹了java 多線程死鎖詳解及簡單實例的相關(guān)資料,需要的朋友可以參考下

java 多線程死鎖

  相信有過多線程編程經(jīng)驗的朋友,都吃過死鎖的苦。除非你不使用多線程,否則死鎖的可能性會一直存在。為什么會出現(xiàn)死鎖呢?我想原因主要有下面幾個方面:

    (1)個人使用鎖的經(jīng)驗差異
    (2)模塊使用鎖的差異
    (3)版本之間的差異
    (4)分支之間的差異
    (5)修改代碼和重構(gòu)代碼帶來的差異

    不管什么原因,死鎖的危機(jī)都是存在的。那么,通常出現(xiàn)的死鎖都有哪些呢?我們可以一個一個看過來,

    (1)忘記釋放鎖

void data_process() 
{ 
  EnterCriticalSection(); 
 
  if(/* error happens */) 
    return; 
 
  LeaveCriticalSection(); 
} 

    (2)單線程重復(fù)申請鎖

void sub_func() 
{ 
  EnterCriticalSection(); 
  do_something(); 
  LeaveCriticalSection(); 
} 
 
void data_process() 
{ 
  EnterCriticalSection(); 
  sub_func(); 
  LeaveCriticalSection(); 
} 

    (3)雙線程多鎖申請

void data_process1() 
{ 
  EnterCriticalSection(&cs1); 
  EnterCriticalSection(&cs2); 
  do_something1(); 
  LeaveCriticalSection(&cs2); 
  LeaveCriticalSection(&cs1); 
} 
 
void data_process2() 
{ 
  EnterCriticalSection(&cs2); 
  EnterCriticalSection(&cs1); 
  do_something2(); 
  LeaveCriticalSection(&cs1); 
  LeaveCriticalSection(&cs2); 
} 

    (4)環(huán)形鎖申請

/* 
*       A  - B 
*       |   | 
*       C  - D 
*/ 

    假設(shè)有A、B、C、D四個人在一起吃飯,每個人左右各有一只筷子。所以,這其中要是有一個人想吃飯,他必須首先拿起左邊的筷子,再拿起右邊的筷子?,F(xiàn)在,我們讓所有的人同時開始吃飯。那么就很有可能出現(xiàn)這種情況。每個人都拿起了左邊的筷子,或者每個人都拿起了右邊的筷子,為了吃飯,他們現(xiàn)在都在等另外一只筷子。此時每個人都想吃飯,同時每個人都不想放棄自己已經(jīng)得到的一那只筷子。所以,事實上大家都吃不了飯。

總結(jié):

    (1)死鎖的危險始終存在,但是我們應(yīng)該盡量減少這種危害存在的范圍
    (2)解決死鎖花費的代價是異常高昂的
    (3)最好的死鎖處理方法就是在編寫程序的時候盡可能檢測到死鎖
    (4)多線程是一把雙刃劍,有了效率的提高當(dāng)然就有死鎖的危險
    (5)某些程序的死鎖是可以容忍的,大不了重啟機(jī)器,但是有些程序不行

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關(guān)文章

  • Spring實戰(zhàn)之使用Resource作為屬性操作示例

    Spring實戰(zhàn)之使用Resource作為屬性操作示例

    這篇文章主要介紹了Spring實戰(zhàn)之使用Resource作為屬性,結(jié)合實例形式分析了spring載人Resource作為屬性相關(guān)配置與使用技巧,需要的朋友可以參考下
    2020-01-01
  • Spring注解開發(fā)生命周期原理解析

    Spring注解開發(fā)生命周期原理解析

    這篇文章主要介紹了Spring注解開發(fā)生命周期原理解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-09-09
  • java中final與finally的使用介紹

    java中final與finally的使用介紹

    本篇文章介紹了,在java中final與finally的使用。需要的朋友參考下
    2013-04-04
  • linux重啟java服務(wù)的腳本

    linux重啟java服務(wù)的腳本

    這篇文章主要介紹了linux重啟java服務(wù)的腳本,本文分步驟通過shell腳本給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • Java雙括弧初始化操作技巧

    Java雙括弧初始化操作技巧

    這篇文章主要介紹了Java雙括弧初始化操作技巧,這種方法不僅提高了代碼的可讀性,而且簡化了代碼的數(shù)量,需要的朋友可以參考下
    2015-12-12
  • idea導(dǎo)入項目框架的詳細(xì)操作方法

    idea導(dǎo)入項目框架的詳細(xì)操作方法

    大家使用idea開發(fā)工具時經(jīng)常會需要導(dǎo)入項目框架,糾結(jié)該怎么操作呢,今天小編給大家分享一篇圖文教程,幫助大家解決idea導(dǎo)入項目框架的問題,感興趣的朋友一起看看吧
    2021-05-05
  • 一文教你搞懂SpringBoot自定義攔截器的思路

    一文教你搞懂SpringBoot自定義攔截器的思路

    在開發(fā)中,都離不開攔截器的使用,比如說在開發(fā)登錄功能時,實現(xiàn)權(quán)限管理功能時等,這篇文章主要帶大家使用SpringBoot梳理自定義攔截器的思路,需要的可以參考一下
    2023-08-08
  • spring基礎(chǔ)概念A(yù)OP與動態(tài)代理理解

    spring基礎(chǔ)概念A(yù)OP與動態(tài)代理理解

    這篇文章主要為大家詳細(xì)介紹了spring基礎(chǔ)概念A(yù)OP與動態(tài)代理,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • java實現(xiàn)實時通信聊天程序

    java實現(xiàn)實時通信聊天程序

    這篇文章主要為大家詳細(xì)介紹了java實現(xiàn)實時通信聊天程序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • Java中的線程安全集合CopyOnWriteArrayList解析

    Java中的線程安全集合CopyOnWriteArrayList解析

    這篇文章主要介紹了Java中的線程安全CopyOnWriteArrayList解析,CopyOnWriteArrayList是ArrayList的線程安全版本,從他的名字可以推測,CopyOnWriteArrayList是在有寫操作的時候會copy一份數(shù)據(jù),然后寫完再設(shè)置成新的數(shù)據(jù),需要的朋友可以參考下
    2023-12-12

最新評論