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

java 多線程死鎖詳解及簡(jiǎn)單實(shí)例

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

java 多線程死鎖

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

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

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

    (1)忘記釋放鎖

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

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

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

    (3)雙線程多鎖申請(qǐng)

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)形鎖申請(qǐng)

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

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

總結(jié):

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

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

相關(guān)文章

  • MyBatis-Plus插件機(jī)制及通用Service新功能

    MyBatis-Plus插件機(jī)制及通用Service新功能

    這篇文章主要介紹了MyBatis-Plus插件機(jī)制以及通用Service、新功能,本文通過(guò)實(shí)例圖文相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • Java實(shí)現(xiàn)AC自動(dòng)機(jī)全文檢索示例

    Java實(shí)現(xiàn)AC自動(dòng)機(jī)全文檢索示例

    本篇文章主要介紹了Java實(shí)現(xiàn)AC自動(dòng)機(jī)全文檢索示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-02-02
  • EVCache緩存在Spring Boot中的實(shí)戰(zhàn)示例

    EVCache緩存在Spring Boot中的實(shí)戰(zhàn)示例

    這篇文章主要介紹了EVCache緩存在Spring Boot中的實(shí)戰(zhàn)示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-12-12
  • Spring Security基于散列加密方案實(shí)現(xiàn)自動(dòng)登錄功能

    Spring Security基于散列加密方案實(shí)現(xiàn)自動(dòng)登錄功能

    為了提高項(xiàng)目的用戶體驗(yàn),我們可以在項(xiàng)目中添加自動(dòng)登錄功能,當(dāng)然也要給用戶提供退出登錄的功能。接下來(lái)學(xué)習(xí)下Spring Security基于散列加密方案實(shí)現(xiàn)自動(dòng)登錄功能,一起看看吧
    2021-09-09
  • Java動(dòng)態(tài)規(guī)劃之編輯距離問題示例代碼

    Java動(dòng)態(tài)規(guī)劃之編輯距離問題示例代碼

    這篇文章主要介紹了Java動(dòng)態(tài)規(guī)劃之編輯距離問題示例代碼,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • JavaMe開發(fā)繪制文本框TextEdit

    JavaMe開發(fā)繪制文本框TextEdit

    在JavaMe連載(3)-也說(shuō)MVC設(shè)計(jì)模式 一文中提到了一個(gè)TextEdit類,但沒有給出具體實(shí)現(xiàn),TextEdit是采用GameCanvas繪制的文本編輯器。本文結(jié)合實(shí)例給出實(shí)現(xiàn)的方法。
    2015-09-09
  • spring的幾個(gè)重要類和接口(詳解)

    spring的幾個(gè)重要類和接口(詳解)

    下面小編就為大家?guī)?lái)一篇spring的幾個(gè)重要類和接口(詳解)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-04-04
  • 如何使用XPath提取xml文檔數(shù)據(jù)

    如何使用XPath提取xml文檔數(shù)據(jù)

    這篇文章主要介紹了如何使用XPath提取xml文檔數(shù)據(jù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • 如何使用NSSM將jar包打成Windows服務(wù)

    如何使用NSSM將jar包打成Windows服務(wù)

    這篇文章主要介紹了如何使用NSSM將jar包打成Windows服務(wù),本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-03-03
  • 詳解SpringMVC?HandlerInterceptor攔截器的使用與參數(shù)

    詳解SpringMVC?HandlerInterceptor攔截器的使用與參數(shù)

    本文主要介紹了詳解SpringMVC?HandlerInterceptor攔截器的使用與參數(shù),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01

最新評(píng)論