[英]java ReentrantLock tryLock() misunderstanding
ReentrantLock l = new ReentrantLock(true);
Reader[] readers = new Reader[2];
for (int i = 0; i < readers.length; i++) {
readers[i] = new Reader(l);
}
for (int i = 0; i < readers.length; i++) {
readers[i].start();
}
public class Reader extends Thread {
private ReentrantLock l;
public Reader(ReentrantLock l) {
this.l = l;
}
@Override
public void run() {
try {
l.tryLock();
for (int i = 0; i < 5; i++) {
System.out.println(Thread.currentThread().getName() + " i = " + i);
Thread.sleep(500);
}
// l.unlock(); // although it commented the code not hanged why?
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
根据我对 tryLock() 的理解,如果它没有被另一个线程持有,则获取锁并立即返回在我的情况下我有两个线程假设 thread_0 现在获得锁我有两个问题: Q1:为什么 thread_1 之后仍然进入临界区l.tryLock() 是不是被thread_0锁了; Q2:是不是我的代码会被挂起,因为 thread_0 没有释放锁#thanks Advance
您的代码正在进入临界区,因为 tryLock() 不是阻塞函数,它会立即返回 true 或 false,然后继续下面的“临界区”代码片段。
在 tryLock() 的文档中,您可以阅读
如果锁被另一个线程持有,那么这个方法将立即返回 false 值。
因此,您需要调用 lock() 方法,该方法会等待另一个读取器释放锁。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.