国产探花免费观看_亚洲丰满少妇自慰呻吟_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異常。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 林西县| 康定县| 巨鹿县| 华安县| 济阳县| 鄂伦春自治旗| 郯城县| 丰镇市| 西乡县| 华阴市| 洛浦县| 西宁市| 东乡| 天祝| 芦山县| 临澧县| 始兴县| 哈尔滨市| 阳原县| 津市市| 麟游县| 鱼台县| 闽侯县| 万盛区| 稷山县| 镇平县| 郑州市| 开化县| 屯昌县| 开鲁县| 广灵县| 合阳县| 上思县| 泸州市| 汉寿县| 大关县| 北京市| 静安区| 文成县| 泰宁县| 黎川县|