多線程總結☞鎖機制

1:多線程共享資源的時候,一個要分出先來後到的,多線程的同步機制實際上是靠鎖來完成的
2:線程同步的方式:三種方式--(1)在方法上加synchronized關鍵字(2)在需要做同步的代碼段上加synchronized(3)使用lock鎖
3:從JVM角度看待鎖:JVM需要對兩類線程共享的數據進行協調(保存在堆中實例變量和方法上的類變量)
4:一個線程可以多次對同一對象上鎖,對於每一個對象,java虛擬機維護一個加鎖計數器,線程每獲取一次該對象,計數器+1,每釋放一次,計數器-1,當爲0時就代表鎖被完全釋放
5:在java程序中,只需要使用synchronized塊和synchronized方法來標誌一塊區域,每次進入這塊區域時,JVM自動鎖上對象或類
6:何時要同步?讀取上一次可能由另一個線程寫入的變量,寫入下一次可能由另一個線程讀取的變量
7:對共享資源的訪問必須是順序的,也就是說當多個線程對共享資源進行訪問的時候,只能有一個線程獲得該對象的鎖,
比如 當線程A 想獲取線程B的鎖時候,線程A必須等待或者阻塞,直到線程B釋放鎖爲止
java內置鎖也稱爲互斥鎖,也就是說鎖實際上是一種互斥機制
8:根據使用方式不同,我們將鎖分爲對象鎖和類鎖,兩個鎖之間的差別還是很大的
對象鎖作用在實例方法上或者對象上面,類鎖作用在靜態方法上或者Class對象上面
一個類可以有多個實例對象,所有一個類的對象鎖可以有多個,但是每個類只有一個Class對象 所以類鎖只有一個
9:死鎖是多線程開發中比較常見的問題,若有多個線程訪問多個資源的時候,相互之間存在競爭,就會出現死鎖,
當一個線程等待另一個縣城持有的鎖時,而另一個線程也在等待該線程所持有的鎖時、
這時候兩個線程就會處於阻塞狀態,程序便出現死鎖
10:ReentrantLock是一種標準的互斥鎖,每次只有一個線程能持有鎖,讀寫鎖不一樣,暴露了兩個lock對象,一個用於讀取 一個用於寫入操作
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章