我正在閱讀最初來自(我相信)IBM developerworks網站的線程教程。其中他們談到了synchronized關鍵字,以及同步代碼塊如何被實際對象鎖定,而不是代碼塊本身。在java中同步關鍵字和靜態類
例如,在作者下面的代碼說明的是,即使靜態類「Thingie
的setLastAccess
方法被列爲同步的,在它下面限定的兩個線程可以每個呼叫setLastAccess
同時,因爲他們使用不同的值對於thingie。但是如果thingie是靜態的,那不就意味着它們使用了相同的值嗎?
這種情況下,變量名稱只需要不同,即使它們指的是同一個對象?
public class SyncExample {
public static class Thingie {
private Date lastAccess;
public synchronized void setLastAccess(Date date) {
this.lastAccess = date;
}
}
public static class MyThread extends Thread {
private Thingie thingie;
public MyThread(Thingie thingie) {
this.thingie = thingie;
}
public void run() {
thingie.setLastAccess(new Date());
}
}
public static void main() {
Thingie thingie1 = new Thingie(),
thingie2 = new Thingie();
new MyThread(thingie1).start();
new MyThread(thingie2).start();
}
}
我確定它不依賴於變量的名稱。同步的是對實際對象的調用,而不是變量。 –
相關http://stackoverflow.com/questions/578904/how-do-synchronized-static-methods-work-in-java – Gray
我的回答是否幫助你@larryq?如果是這樣,請接受它。 – Gray