多執行緒訪問同步方法的7種情況(面試常考)

2022-03-30 00:52:41 字數 1547 閱讀 6532

1.

2.4.同時訪問同步方法和非同步方法

synchronized只作用於用它修飾的方法,沒有加synchronized 的方法不會受到影響,

如圖可以看出加了synchronized

修飾符的方法和沒有加的方法是同步執行的,也就是說互不影響

5.同時訪問乙個類的普通同步方法

對於同乙個例項來說,他們拿到了同一把鎖,沒辦法同時執行,而是序列

*雖然synchronized

沒有指明用那一把鎖,但是其背後原理已經指明他們用了同一把鎖,因為他們用了同一把鎖*

同乙個例項

如果不是同乙個例項,則普通同步方法各自會獲得一把鎖,能夠併發執行

6.同時訪問靜態synchronize方法和非靜態synchronized方法

因為它們兩個拿到了不同的鎖,所以是並行執行的,

7.方法丟擲異常後,會釋放鎖

方法丟擲異常後,會釋放鎖,一旦丟擲異常後,第二個執行緒會立刻進入同步方法,意味著鎖已經釋放

個人認為還有一種:同時訪問多個靜態synchronize方法

這種形式他們拿到的只是同一把鎖,所以不能並行執行,所以要按照順序乙個執行緒執行完再到另外乙個執行緒

總結

1.一把鎖只能同時被乙個執行緒獲取,沒有拿到鎖的必須等待

2,每個例項都有自己對應的一把鎖,不同例項之間互不影響,例外:(鎖物件是*.class以及synchronized修飾的是static方法的時候,所有物件共同擁有一把鎖)

3.無論是方法正常執行完畢或者是方法丟擲異常,都會釋放鎖,

4,在乙個被synchronized修飾的方法裡面呼叫了乙個沒有被synchronized修飾的方法執行緒安全嗎?

答案是不安全,因為synchronized只對修飾本生的方法起作用,對其他方法不起作用。

多執行緒同步的五種方法

為什麼要執行緒同步?當多個執行緒同時訪問乙個變數或物件時,如果這些執行緒既有讀又有寫操作時,就會導致變數值或物件的狀態出現混亂。1 synchronized關鍵字修飾的方法 2 同步 塊 既有synchronized修飾的語句塊,語句塊會自動加上鎖 3 使用特殊變數volatile實現執行緒同步 v...

多執行緒 同步的實現方法

多執行緒有兩種實現方法,分別是繼承thread類與實現runnable介面 同步的實現方面有兩種,分別是synchronized,wait與notify wait 使乙個執行緒處於等待狀態,並且釋放所持有的物件的lock。sleep 使乙個正在執行的執行緒處於睡眠狀態,是乙個靜態方法,呼叫此方法要捕...

建立多執行緒的7種方式

1,繼承thread 主要掌握 執行緒的初始化,啟動,中斷的正確處理方式 interrupted public class demo1 class mythread extends thread 2,實現runnable 原始碼解析,為什麼會呼叫runnable的run方法 public class...