java線程基礎概念

多線程的實現

繼承Thread類實現多線程
Runnable()接口實現多線程

如果一個類爲了實現多線程繼承Thread類就會有但繼承侷限

Callable實現多線程

[](從JDK1.5開始追加新的開發包:java.uit.concurrent, 這個開發包主要是進行高併發編程使用的,包含很多在高併發操作會使用的類。在這個包裏定義有一個新的接口Callable)

線程的同步與死鎖

同步處理
synchronized處理同步問題
若果想要實現“鎖“ 的功能,可以採用關鍵字synchronized來處理

使用synchronized關鍵字處理有兩種模式,同步代碼塊,同步方法

若果使用同步代碼塊必須設置一個要鎖定的對象,使用一般可以鎖定當前對象。
synchronized鎖的優化
synchronized鎖的最特點是同一時刻只有一個線程能夠獲得對象的監視器(monitor),從而進入到同步代碼快或者方法之中,即變現互斥性,這種線程的效率低,每次只能通過一個線程。

synchronized鎖的優化措施,適應自旋,,鎖消除,鎖粗話,輕量級鎖,偏向鎖等等。

悲觀鎖:每次執行臨界區域時候,當前線程獲得鎖第同時會阻塞其他線程獲取該鎖。
CAS適應一種無鎖操作(樂觀鎖策略),即所有線程訪問臨界資源時候,不會出現衝突,線程不會出現阻塞停頓狀態。

CAS操作過程 : 包含三個值分別爲: V內存地址存放實際值,O 預期值(舊值), N更新後的新值,是一個判斷V, O是否相等然後將O賦值V的過程。

Java對象頭在同步過程獲取對象的monitor,即獲取對象的鎖,是獲得對象的一個標誌,這個標誌存放在java對象頭之中。

ThreadLocal

保證變量值在個線程中是獨立的。

Lock體系

Lock鎖出現之前,java中主要靠synchronized 關鍵字實現鎖的功能,JDK5以後提供了lock接口,來提供和synchronized一樣的功能。雖然失去synchronized隱身的加鎖解鎖的便利,但是卻擁有加鎖和解鎖的可操作性,可中斷獲取以及超時獲取鎖synchronized關鍵字所不劇本的同步特性。

需要注意的是synchronized 同步執行完成或者遇到異常鎖會自動釋放,而lock必須調用unlock()方法釋放鎖,因此在finally塊中釋放鎖。

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