在Java類中執行Synchronized方法時,哪個Object被鎖定?在Java類中執行Synchronized方法時,哪個Object被鎖定?
回答
對於靜態方法,類被鎖定
class A {
static synchronized void method() {
就好了,雖然不是完全一樣
class A {
static void method() {
synchronized(A.class) {
在這個病例如果一個線程已經執行此方法,然後沒有其他線程可以調用此方法。
對於實例方法,實例被鎖定。
class A {
synchronized void method() {
是大致相同
class A {
void method() {
synchronized(this) {
在這種區分如果有不同的實例對象被初始化然後每個實例一個線程可以進入該執行塊。
注意:這是一種常見的誤解,即該方法存在鎖定或該方法被鎖定。事實並非如此,事實上沒有標準的方法來做到這一點。
如果你確實設法瞭解這個問題,你可以編輯它,讓它變得更清晰 –
@SleimanJneidi問題很明顯,如果這是你正在尋找的答案。我不會經常冷靜下來,但是有些人會降低他們認爲應該知道的基本Java的問題。 –
你說你的第二個例子和你的第一個例子「不完全一樣」,但是在'synchronized'實例方法和一個實例方法之間是否有任何_practical_差異,它的整個主體是一個'synchronized(this)'語句?通過「實際差異」,我不是指通過檢查字節代碼可以看出的東西;我的意思是,是否有任何可以編寫的純Java單元測試可以揭示兩種情況之間的差異。 –
- 1. 擴展類synchronized方法鎖定
- 2. 釋放BufferedReader.readLine(),而用synchronized方法鎖定
- 3. 鎖定等待@synchronized
- 4. 當sync'd方法被鎖定時訪問類的非sync'd方法
- 5. 在Java中,當對象中的一個方法是'synchronized'時,所有方法都'synchronized'嗎?
- 6. 在Objective-C和Swift中定義的類,哪一個被執行?
- 7. 書面synchronized方法的Java
- 8. SystemEvents.SessionSwitch哪個用戶被鎖定/解鎖
- 9. java可以優先執行哪個方法並按哪個順序執行?
- 10. @synchronized [UIView animationWithDuration ...]鎖定結束?
- 11. Objective-C @synchronized object changes
- 12. 執行一方法被調用java的
- 13. 更改@synchronized節中的鎖定對象
- 14. Java - 在特定日期執行方法
- 15. 用戶帳戶被鎖定時,哪個LDAP屬性被修改?
- 16. JavaScript類方法沒有被執行
- 17. 在Java中執行另一個類的方法...以及更多
- 18. java中的方法執行時間
- 19. 當方法運行時JFrame被完全鎖定
- 20. 哪些方法在Java中被動態綁定?
- 21. 文件被哪個進程鎖定?
- 22. 文件被哪個進程鎖定(android)?
- 23. 哪個類首先在Python中執行?
- 24. 決定在執行時間實例化哪個子類
- 25. 哪個線程執行方法?
- 26. 在特定方法執行時通知
- 27. 如何在PC鎖定時繼續Java執行?
- 28. Java同步關鍵字 - 它是否保護類方法不被同時執行?
- 29. 確定將執行哪種方法(類型系統)
- 30. 在java同步方法上鎖定
類本身('類>'對象) –
投票結束作爲題外話,因爲這個問題不是關於編程問題。也就是說,這個問題沒有包含任何OP編寫的代碼示例,也沒有詢問爲什麼代碼不能滿足OP的期望。 –