【发布时间】:2014-07-13 12:10:08
【问题描述】:
在这种情况下如何获得多个锁:
public class DoubleCounter
{
private int valA = 0;
private int valB = 0;
private Object lockA = new Object();
private Object lockB = new Object();
public void incrementA()
{
synchronized (lockA)
{
valA++;
}
}
public void incrementB()
{
synchronized (lockB)
{
valB++;
}
}
public void print()
{
//I have to obtain both lockA & lockB before executing this:
System.out.format("valA: %d\nvalB: %d", valA, valB);
}
}
请记住,我不希望一个线程执行 incrementA() 阻止另一个线程执行 incrementB() - 因此我不想使用同步方法。
在 StackOverflow 上曾两次询问过类似(不完全相同)的问题,但我仍然没有得到我想要的答案。我唯一知道的是,我不应该将一个 synchronized() 嵌套在另一个 synchornized() 中。
【问题讨论】:
标签: java concurrency locking synchronized