《java多執行緒程式設計核心技術》核心筆記 一

2021-07-14 09:11:13 字數 1588 閱讀 1236

執行緒具有優先順序

執行緒的優先順序具有繼承特性。被呼叫者繼承呼叫者的優先順序

優先順序高的執行緒 絕大部分會現執行

方法內的變數是執行緒安全的。

多個執行緒訪問同乙個物件的同步方法時,一定是執行緒安全的。

synchronized取得的是物件鎖 多個執行緒訪問乙個物件 synchronized

如果乙個資源不是共享的 

a執行緒先持有object物件的lock鎖 b執行緒可以非同步呼叫object物件中的非synchronized型別的方法

a執行緒先持有object物件的lock鎖 b執行緒如果也呼叫物件中的synchronized型別的方法 那麼需要排隊等待.

雖然在複製的時候進行了同步,但是在取之的時候如果不同步會出現意向不到的情況,會已經被其他執行緒更改過了.

可重入鎖的概念是:自己可以再次獲取自己的內部鎖。比如有1條執行緒獲得了乙個物件鎖,此時這個物件鎖還沒有釋放,

當其想再次獲得物件鎖的時候還是可以獲取的,要不然就會造成死鎖的狀態.

若執行緒執行過程中出現異常,則所持有的物件鎖會自動釋放.

如果父類是同步方法 而子類不是同步方法 那麼子類是不能繼承父類的同步方法的。

當然用synchonized同步方法是有弊端的 有的時候需要用同步**塊來實現.

不在synchonized塊就是非同步  在synchonized就是同步

鎖非this物件具有一定的優點:如果在乙個類中有很多個synchronized,這是雖然能同步,但是會受到阻塞,效率上面會大大降低

因此非this鎖的意義就在在乙個物件中,synchonized可以鎖定不同的物件 ,他們彼此之間是非同步的。

由於執行緒執行的順序具有不確定性,那麼當ab兩個執行緒執行帶有分支判斷的額方法時,就會出現邏輯錯誤.

當多執行緒同時執行synchronized(x){}同步**塊時呈同步效果

當其他執行緒執行x物件中的synchronized同步方法時呈同步效果

當其他執行緒執行x物件的synchronized(this)**塊時也是同步效果

synchronized是對類的當前例項進行加鎖,防止其他執行緒同時訪問該類的該例項的所有synchronized塊,注意這裡是「類的當前例項」,

類的兩個不同例項就沒有這種約束了。那麼static synchronized恰好就是要控制類的所有例項的訪問了,

static synchronized是限制執行緒同時訪問jvm中該類的所有例項同時訪問對應的**塊.

synchronzied的是例項方法與synchronzied的類方法由於鎖定(lock)不同。

同步synchronized(class)**的作用和synchronized static方法的作用是一樣的.

在一般情況下synchronized不使用string作為鎖物件,這是由於string的常量池所決定的,容易造成死鎖的特點。而改用其他 比如new object();

在雙方互相等待對方釋放鎖就有可能出現死鎖的現象.

只要鎖物件不變,即使物件的屬性改變了 執行的結果還是同步的。

Java多執行緒 程式設計核心技術4Lock

執行緒間同步互斥,且嗅探鎖定 多路分支通知,使用上較synchronized靈活 呼叫該物件的lock 獲取鎖,unlock 釋放鎖 借助condition實現等待 通知模式 condition 物件監視器 是jdk5 靈活性 多路通知 乙個lock物件中建多個condition例項,執行緒物件可以...

Java多執行緒 程式設計核心技術5 Lock

1 計畫時間早於當前時間,提前執行 2 timertask類的cancel 方法 將自身從任務佇列中清除 3 timer類的cancel方法 清空任務佇列的全部任務 如果該方法沒有搶到鎖,任務還是繼續執行 4 schedule timertask task long delay,long perio...

Java 多執行緒程式設計核心技術4 Lock

呼叫lock.lock 的執行緒就持有了 物件監視器 其他執行緒只有等待鎖被釋放時再次爭搶。效果和使用synchronized關鍵字一樣,執行緒之間執行的順序是隨機的。呼叫reentrantlock物件的lock 方法獲取鎖,呼叫unlock 方法釋放鎖。condition類具有更好的靈活性,比如可...