鎖 只有對象纔有鎖,一個對象有且只有一把鎖。
只能使用對象的鎖去同步,且只能同步方法/代碼塊,而不能同步變量和類;
同步損害併發性,應儘可能縮小同步範圍。
注意:同步代碼塊與同步方法的區別 一個類中要同步多個方法時都使用,爲了避免鎖的衝突,必然需要使用不同的對象,要使用同步代碼塊,方法
多個類中使用同一個瑣,也必須用同步代碼庫方法。
分類 1代碼塊鎖,2方法鎖 同步整個方法的鎖 :
(this當前對象鎖 , 靜態類對象鎖其實系統中並不存在什麼類鎖。當一個同步靜態方法被調用時,系統獲取的其實就是代表該類的類對象的對象鎖)。
在Java多線程編程中,最常見的synchronized關鍵字實際上是依靠對象鎖的機制來實現線程同步的。我們似乎可以聽到synchronized在向我們說:“給我一把 鎖,我能創造一個規矩”。死鎖 多線程死鎖是因爲 出現了互斥鎖 互斥鎖 即當前的動作需要未來作爲驅使條件,而未來又是沒有實現的,即用一個不存在的條件驅使當前的動作,則必然死鎖。
反射 反射就是吧java類中的各種成分映射成相應的java類.
Class類---》類的類- 》
獲得對象就是當前類
方法的類----》獲得對象個對象即當前方法
成員變量的類-----》
獲得對象即是當前成員變量
!!!!!每個自定義的類都是Class類的一個對象。
在一個運行的程序中,會有許多類和接口存在。我們就用Class這個來來表示對這些類和接口的抽象
,而Class類的每個實例則代表運行中的一個類。例如,運行的程序有A、B、C三個類,那麼Class類就是對A、B、C三個類的抽象。
所謂抽象,就是提取這些類的一些共同特徵,比如說這些類都有類名,都有對應的hashcode,
可以判斷類型屬於class、interface、enum還是annotation。這些可以封裝成Class類的域,
另外可以定義一些方法,比如獲取某個方法、獲取類型名等等。這樣就封裝了一個表示類型的類。(type)