一個類有一個同步的靜態方法和非靜態方法。兩個線程試圖訪問這些方法,他們能夠做到這一點嗎?有沒有鎖?什麼類型的鎖?靜態和非靜態方法的同步
-2
A
回答
1
當在方法上使用單詞時,您實際上鎖定了實例方法的this
以及靜態方法的類本身。
例如:
public class MyClass {
public synchronized void foo1() {}
public synchronized void foo2() {}
}
在這個例子中,只有一個線程可以進入foo1()
或同一個實例的foo2()
。因此,如果我們有這樣的事情:
MyClass instance1 = new MyClass();
MyClass instance2 = new MyClass();
所以有可能一個線程在foo1()
爲instance1
,而另一個線程是在instance2
foo1()
。但2線程不可能進入的instance1
和foo2
在instance1
。因爲它們都是使用this
鎖定的。
靜態方法也是如此,但它們鎖定類本身。含義 - 一個線程可以在某個點輸入一個靜態方法。
2
它們將被同步,但在不同的對象上,因此將不會對它們同時運行保護。
實例方法在對象實例上同步,而靜態方法在類對象上同步。
如果你想在兩者之間進行通用同步,請在同步子句中使用通用鎖對象。例如,你可以在類對象上同步。
相關問題
- 1. 靜態同步方法與非靜態同步方法
- 2. 關於靜態和非靜態方法的Java同步
- 3. 靜態和非靜態同步
- 4. 線程中的靜態同步和非靜態同步方法行爲差異
- 5. 同步靜態方法和非靜態方法之間的區別
- 6. 靜態和非靜態方法工作
- 7. powermockito靜態和非靜態方法鏈
- 8. 靜態和非靜態方法
- 9. 同步靜態方法
- 10. 靜態同步方法
- 11. Java - 同步靜態方法
- 12. java靜態同步方法
- 13. 併發執行靜態和非靜態同步方法的問題?
- 14. 通過靜態和非靜態方法訪問靜態屬性?
- 15. 非靜態方法說它的靜態?
- 16. 非靜態的靜態方法
- 17. 靜態初始化和靜態同步方法鎖定問題
- 18. 訪問靜態字段的Java同步和靜態同步方法
- 19. 靜態/非靜態方法問題
- 20. 泛型方法:靜態與非靜態
- 21. 靜態/非靜態方法參考
- 22. 不能使靜態方法非靜態
- 23. 靜態與非靜態方法2
- 24. 方法參考靜態與非靜態
- 25. 靜態參照非靜態方法getBaseContext()
- 26. 靜態與非靜態方法
- 27. 非靜態調用靜態方法
- 28. 如何在靜態方法中訪問靜態和非靜態方法
- 29. 靜態和非靜態
- 30. 靜態方法和非靜態方法有什麼區別?
現在不清楚你在問什麼。它看起來像是Java?添加該標籤。還修復你的語法,然後最後添加你的代碼。 – AndyG