Java 多线程:显式锁
我对这几行代码有一个问题:Java 多线程:显式锁,java,Java,我对这几行代码有一个问题: class S1Es3SharedState { //lock private final Lock lock = new ReentrantLock(); private int x = 0; public int getX() { lock.lock(); try { return x; } finally { lock.unlock
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();
}
}
}
同一个对象在方法getX和方法incrementX
中锁定stations是什么意思?
如果我理解这意味着使用同一个对象来锁定两个方法的station,那么,如果两个方法都是空闲的,线程可以进入其中一个方法,是吗?
示例:
ThreadA在getX方法中,现在有一个上下文开关,因此ThreadA正在等待(在方法中),ThreadB正在运行,希望进入getX()方法,但它不能,因为已经有ThreadA了。另外,如果ThreadB需要输入递增x方法,它仍然不能输入,因为ThreadA在getX方法中。因此,我使用的lock对象允许在两个方法都是空闲的情况下输入线程(没有正在运行的线程)。有可能吗?这是因为我使用了同一个对象来锁定getX和incrementX方法。这意味着两个不同的线程T1和T2不能获取
并在同一时刻递增变量 简单地说,
返回x
和this.x=x++代码>无法执行
同时通过两个不同的线程T1和T2。线程
只有在完成并调用unlock时,才进入第一个赢家,
第二个人将有机会自己获得锁
做他的工作 只是一个与你的问题无关的旁白。。。你是否意识到,this.x=x++
比x++
更为冗长和怪异?是的,但我用eclipse(以自动方式)做得非常快,只是为了举个例子,在每种情况下我都知道:)谢谢,在某种程度上就像交通灯一样,当在这两种方法中的一种中输入T1或T2时。。。这交通灯是红色的,当这两种方法都免费时,它将是绿色的,对吗?此交通灯控制2条街道(方法),当两条街道都空闲时,灯为绿色。我能这样想象吗?是的,我觉得这是个很好的类比。锁定对象只是一个,锁定对象是红绿灯。方法是两条街道。