国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

鎖的疑問和總結

2019-11-15 01:12:29
字體:
來源:轉載
供稿:網友
鎖的疑問和總結

獲取不到 synchronized 的阻塞線程什么時候會釋放?<核心>p634 14.3.3 節

  當線程嘗試獲得鎖的時候,如果鎖被其他線程占用,那么這個線程就會進入阻塞狀態(不管是內部鎖,還是ReentrantLock).只有在其他線程釋放鎖的時候,而且線程調度器允許這個線程持有這個鎖的時候,這個線程才會變成非阻塞狀態.

  同時當線程處于這種因獲取鎖而進入的阻塞狀態,就是遇到了lock()方法而阻塞,是不可以被中斷的.內部鎖(synchronized)的也是lock() 方法.

  而另外一種獲取鎖的方法,tryLock 則是可以被中斷的.

  所以synchronized 正在獲取鎖的線程不能被中斷,而ReentrantLock 的可以(通過使用tryLock方法.)

獲取到synchronized 的線程可sleep 否?能手動解鎖否?能被中斷嗎?

  synchronized 鎖會自動獲取一個內部鎖,和ReentrantLock 的鎖一樣.而synchronized 的鎖定的代碼之間也是可以試用sleep 方法的,所以是可以sleep.

  synchronized 不能手動解鎖,沒有lock.unlock 這個方法.

  synchronized 和一般的鎖一樣,所以是可以被中斷的.就是鎖在鎖內部你可以檢測中斷狀態來決定如何處理中斷.

線程阻塞或則等待的總結:<核心>p648

1.線程會因為嘗試去獲得鎖而阻塞.不可中斷,由cpu決定是否非阻塞

2.因為條件對象的wait()/await() 方法而等待.這種等待狀態需要先用條件解除等待,如signalAll 或notifyAll,解除后還是處于等待獲取鎖的阻塞狀態,再等待其他線程釋放鎖,這些線程才可能變成非阻塞(轉換為情況1了)

3.因為sleep,join() 方法而等待.可被中斷.

線程中斷信號的處理:

1.因情況2 和情況3進入等待或阻塞狀態時,遇到中斷會拋出中斷異常.

2.因情況1進入阻塞時,遇到中斷信號,會因阻塞而不能處理,要等到線程轉為非阻塞時才會去處理.

3.線程正常允許時,遇到中斷信號,則看代碼有沒有偵測到信號,還有怎樣處理.參考:<核心>p631

不同對象中的synchronized("lock") 會不會互斥? synchronized 中的關鍵字是字符串,字符串相同則是同一個常量(沒有new),這是不是意味著是同一個鎖?

但是不同變量的內部鎖synchronized("lock")會是同一個嗎?

上鎖的方法被繼承之后也是被上鎖的嗎?需要測試兩種鎖。

ReentrantReadWriteLock 中的ReadLock鎖定是指鎖定的代碼中只能 執行讀操作而不能執行寫操作?

ReentrantReadWriteLock 的總結:

(a).重入方面其內部的WriteLock可以獲取ReadLock,但是反過來ReadLock想要獲得WriteLock則永遠都不要想。(b).WriteLock可以降級為ReadLock,順序是:先獲得WriteLock再獲得ReadLock,然后釋放WriteLock,這時候線程將保持Readlock的持 有。反過來ReadLock想要升級為WriteLock則不可能,為什么?參看(a)(c).ReadLock可以被多個線程持有并且在作用時排斥任何的WriteLock,而WriteLock則是完全的互斥。這一特性最為重要,因為對于高 讀取頻率而相對較低寫入的數據結構,使用此類鎖同步機制則可以提高并發量。(d).不管是ReadLock還是WriteLock都支持Interrupt,語義與ReentrantLock一致。(e).WriteLock支持Condition并且與ReentrantLock語義一致,而ReadLock則不能使用Condition,否則拋出 UnsupportedOperationException異常。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 都安| 郑州市| 普格县| 双江| 永仁县| 喜德县| 宁强县| 顺平县| 龙川县| 麦盖提县| 龙山县| 南汇区| 峨山| 攀枝花市| 格尔木市| 巴中市| 潼关县| 东明县| 克什克腾旗| 抚顺市| 石楼县| 乐昌市| 西和县| 吴堡县| 桐梓县| 临桂县| 连州市| 紫金县| 常德市| 宜城市| 南昌市| 大埔区| 安塞县| 太和县| 焉耆| 栖霞市| 比如县| 普兰县| 南华县| 桂东县| 饶河县|