2017.01.01 多線程學習(一)

經過了前一段時間的學校的搶課刷課,尤其感覺到了多線程的重要性,在新年第一天也是我第一次寫感悟,請大家多提建議和意見。

1.并發(concuurency)與并行(parallelism)的區別

并行:即平行,幾個線程同時執行

并發:一個線程依據時間片(時鐘周期)有順序的不停執行幾個任務(每次可能都只執行一小部分就切換到下一任務)有個調度的過程

2.并發級別

2.1阻塞:可能發生死鎖(deadlock),饑餓(starvation),活鎖(livelock)

??? 死鎖:不同線程同時持有一個程序所需要的部分資源且互相等待對方線程釋放資源,自己不釋放 掉。

??? 饑餓:一個或多個線程因為一些原因如優先級低,數據競爭原子操作總是失敗等長時間無法得到需要的資源。

??? 活鎖:發生死鎖后,所有線程全部釋放資源,然后A,B線程分別持有對方資源再發死鎖,如此遞歸下去,程序依然無法繼續。

2.2非阻塞:無障礙,無鎖,無等待;(發生條件由弱到強)

???? 1.無障礙:

a.最弱的菲阻塞調度

b.自由出入臨界區

c.無競爭,有限部內完成操作

d.有競爭時回滾數據

2.無鎖(最常用):

a.是無障礙的

b.每次循環保證有一個線程可以勝出

while(!atomicvar.compareandset(thread1,thread1+1))

{

thread1=atomicvar.get();

}

3.無等待(并發最高級別,可讓系統保持流暢):

a.無鎖

b.所有線程有限步完成

c.無饑餓的

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Java多線程學習 [-] 一擴展javalangThread類 二實現javalangRunnable接口 三T...
    影馳閱讀 2,987評論 1 18
  • Java8張圖 11、字符串不變性 12、equals()方法、hashCode()方法的區別 13、...
    Miley_MOJIE閱讀 3,731評論 0 11
  • 1.解決信號量丟失和假喚醒 public class MyWaitNotify3{ MonitorObject m...
    Q羅閱讀 907評論 0 1
  • 本文主要講了java中多線程的使用方法、線程同步、線程數據傳遞、線程狀態及相應的一些線程函數用法、概述等。 首先講...
    李欣陽閱讀 2,493評論 1 15
  • Java-Review-Note——4.多線程 標簽: JavaStudy PS:本來是分開三篇的,后來想想還是整...
    coder_pig閱讀 1,673評論 2 17