我有一個關於這行代碼的問題:多線程:顯式鎖
class S1Es3SharedState {
//lock
private final Lock lock = new ReentrantLock();
private int x = 0;
public int getX() {
lock.lock();
try {
return x;
} finally {
lock.unlock();
}
}
public void incrementX() {
lock.lock();
try {
this.x = x++;
} finally {
lock.unlock();
}
}
}
相同的對象鎖定在statments方法的getX和方法incrementX
是什麼意思?
如果我明白這意味着同一個對象用於鎖定兩個方法的陳述,那麼如果兩個方法都是免費的,則線程可以輸入這些方法之一,對嗎?
例如:
ThreadA中處於的getX方法內,現在有一個上下文切換所以ThreadA中正在等待(在方法內)和ThreadB正在運行,並且想要在的getX(進入)方法,但它不能因爲已經有了ThreadA。另外如果ThreadB需要輸入增量X方法仍然不能,因爲ThreadA在getX方法中。所以我使用的鎖對象允許在兩個方法都是空閒的情況下(沒有正在運行的線程)輸入一個線程。有可能的?發生這種情況是因爲我使用相同的對象來鎖定getX和incrementX方法。
只是一個方面的評論,沒有什麼與你的問題有關......你知道'this.x = x ++'比'x ++'更加冗長和奇怪嗎? – morgano
是的,但我做了與日食(以自動方式)非常快只是爲了舉一個例子,在每一種情況下,我知道:) –