【Java多線程與併發】——Java多線程與併發概念理解

同步和異步

同步和異步是針對方法調用而言的

同步是指方法調用會等待方法返回,方法返回後才能繼續往下執行。

異步是指方法調用會立即返回,並繼續向下執行,但是異步調用立即返回並不表示這個調用請求處理完成,而是會在後臺起一個線程去執行。

並行與併發

並行與併發從外在表象上來看都是同時執行的。

並行是指多個線程或者是多個進程同時執行,在單核Cpu上是不可能存在並行的,因爲同一時刻單個cpu只能處理一個線程,分時執行。

併發是指多個任務交替使用cpu,同一時刻只能執行一個指令,但是多個線程被快速的輪換執行。

臨界區

臨界區用來表示一種公共資源或者說是共享數據。可以被多線程使用,但是一次只能一個線程使用它,一旦臨界區被佔用,其他線程要想使用臨界區資源,則只能進入阻塞等待隊列。

阻塞與非阻塞

阻塞和非阻塞通常用來形容多線程間的相互影響。

如果一個線程佔用了臨界區資源,那麼其他所有需要這個資源的線程就會在這個臨界區的阻塞隊列中等待,等待就會導致線程掛起,導致阻塞。如果佔用這個臨界區資源的線程一直不釋放資源,那麼所有阻塞在這個臨界區的線程都不能進行工作。

而非阻塞是多個線程同時進入臨界區。

死鎖、飢餓和活鎖

死鎖是指兩個或者多個線程相互持有對方需要的資源,導致這些線程處於等待狀態,無法繼續前行

  • 死鎖產生的必要條件

1.互持條件:一個資源只能被一個進程佔用

2.請求和保持條件:一個進程因請求被佔用的資源發生阻塞時,對已獲得資源保持不放

3.不剝奪條件:任何一個資源在沒被該進程釋放之前,任何其他線程都無法對他剝奪佔用

4.循環等待條件:當發生死鎖時,所等待的資源必然會形成一個環路。造成永久阻塞。

  • 如何解決死鎖:

處理死鎖的策略一般分爲死鎖預防、死鎖避免和死鎖檢測和恢復

死鎖預防通常是設立一些限制條件,破壞死鎖產生的必要條件,避免死鎖發生

死鎖避免是在動態分配資源過程中,用一些算法防止系統進入不安全狀態,從而避免死鎖發生

安全狀態是指如果系統中存在一個所有的安全序列{p1..pn},當pi所需要的系統資源不超過系統當前剩餘資源量與所有pj(j<i)當前佔有資源量之和,則說明系統處於安全狀態。

死鎖檢測和恢復是指在死鎖發生之前不採取任何措施,只檢測當前系統有沒有發生死鎖,並採取措施解除死鎖。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章