62,615
社区成员
发帖
与我相关
我的任务
分享
class Consumer implements Runnable {
Q q;
Consumer(Q q) {
this.q = q;
new Thread(this, "Consumer1").start();
new Thread(this, "Consumer2").start();
new Thread(this, "Consumer3").start();
}
public void run() {
// 使用 Q 中的 ReentrantLock 锁
// 把 Q 中 lock 的 private 去掉,变成包内可访问
q.lock.lock();
try {
while (true) {
q.get();
}
} finally {
// Lock 接口的锁必须在 finally 中释放掉,便于在有异常时也能正常的释放锁,以免造成死锁
// 而用 synchronized 的话,在抛出异常时 JVM 会自动释放锁
q.lock.unlock();
}
}
}