我有一个关于这行代码的问题:多线程:显式锁
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
是的,但我做了与日食(以自动方式)非常快只是为了举一个例子,在每一种情况下,我知道:) –