我在亨氏Kabutz的一看到这个Java的专家通讯版本,虽然其余的(事实上,所有)Kabutz博士的文章都是很好解释和详细,他似乎在掩饰什么这段代码是干什么的,或者更重要的是,它的意义是:
public class SomeObject {
private Object lock1;
private Object lock2;
public void doSomething() {
synchronized(lock1) {
synchronized(lock2) {
// ...
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
嵌套synchronized块的含义是什么?这对于尝试不同的线程doSomething()有何影响?
我有生产者和消费者联系BlockingQueue.
消费者从队列中等待记录并处理它:
Record r = mQueue.take();
process(r);
Run Code Online (Sandbox Code Playgroud)
我需要从其他线程暂停这个过程一段时间.怎么实现呢?
现在我认为实现它,但它似乎是不好的解决方案:
private Object mLock = new Object();
private boolean mLocked = false;
public void lock() {
mLocked = true;
}
public void unlock() {
mLocked = false;
mLock.notify();
}
public void run() {
....
Record r = mQueue.take();
if (mLocked) {
mLock.wait();
}
process(r);
}
Run Code Online (Sandbox Code Playgroud)