併發程式設計學習筆記1 競爭條件可重入鎖

2021-08-31 16:24:04 字數 1560 閱讀 9387

/**

* @author xty

* @description

* @date 19:31 2018/11/12

*/public class counter

}catch (exception e )

}}

/**

* @author xty

* @description

* @date 19:33 2018/11/12

*/public class test

}).start();

new thread(new runnable()

}).start();

new thread(new runnable()

}).start();

}}

新建兩個類,執行之後總數並沒有到3*200 ,因為產生了併發問題。

解決方法1.

/**

* @author xty

* @description

* @date 19:31 2018/11/12

*/public class counter

}catch (exception e )

}}

雖然結果對了,但是使用了synchronized 效率極其低下。

解決方法2.

/**

* @author xty

* @description

* @date 19:31 2018/11/12

*/public class counter

}}catch (exception e )

}}

將synchronized加入到關鍵部位(競爭條件),效率有所提公升。

解決方法3.

/**

* @author xty

* @description

* @date 19:31 2018/11/12

*/public class counter

}catch (exception e )

}}

使用atomicinteger 類。輸出順序並沒***,但是最後的結果是正確的。因為排隊效率會低。

乙個執行緒獲取它本生已經持有的鎖,這是可以成功的。我們知道多個執行緒同時搶占同乙個鎖它們是失敗的。因為它們之間是互斥的。但是呢,乙個執行緒再次獲取乙個自己已經拿過的鎖是可以成功的,那麼它是能夠成功的。

public class widget 

}

public class childwidget extends widget 

}

public class test   

}

子類和父類呼叫的鎖都是w這個物件,因此這種方式叫做內部鎖的可重入機制,也叫可重入鎖。

Java併發學習筆記(1) 併發程式設計基礎

執行緒的狀態 new 初始狀態,執行緒被new 出來,但還沒start 的狀態 runnable 指的是呼叫了start 方法,但還在等著cpu資源的狀態 running 乙個執行緒獲得了cpu資源,正在走的狀態 terminated 執行緒物件的run 方法走完了的狀態 blocked 執行緒被阻...

Java高併發程式設計學習筆記1

執行緒的runnable狀態 已經具備執行條件,只等待cpu排程 萬事俱備只欠東風 1 thread類中得start方法啟動乙個執行緒,並且該執行緒進入了可執行態 runnabel 2 run方法和start方法的區別。3 線 正的執行邏輯在run方法中,通常我們把run方法稱為執行緒的執行單元。重...

併發程式設計學習筆記

併發程式設計第2章,基礎篇 2.1執行緒安全 1併發程式設計即是要控制對共享的可變的變數的訪問操作順序 2保證同步的方法,在語法 級別來說,可以使用synchronized,volatile,或者是現式的鎖,或者使用原子變數 3好的設計是避免執行緒危險的良方,使用oo的方法盡量避免執行緒的隱患。4執...