[英]How does a lock work in Java?
假设我有2个CustomThread
实例和一个称为printer
公共对象实例。 在printer
的print
方法内部,如果我在最后执行lock.lock()
和lock.unlock()
,这如何工作?
private class Printer{
private final Lock mutex = new ReentrantLock(true);
public void print(int thread){
try {
mutex.lock();
for(int i = 0; i < 10; ++i) {
System.out.println(String.format("Printing: %d for Thread: %d", i, thread));
}
} catch(Exception e){
} finally {
mutex.unlock();
}
}
}
我将从我的两个线程对象中调用此方法。
我的问题是,该方法如何lock
自身? 锁不是基于线程的吗? 也许我在这里混淆了核心思想。 当我在方法内部进行锁定时,这意味着什么?
您可以认为锁好像有一个名为owner
的字段,该字段是Thread
。
当lock()
调用且owner
为null
, owner
被分配给调用线程。 调用unlock()
, owner
重置为null
。
当调用lock()
且owner
不为null
(并且不是当前线程,因为该锁是可重入的)时,调用线程将阻塞,直到另一个线程放弃所有权为止,并且可以将其分配为新所有者。
额外的麻烦在于,必须检查当前线程是否拥有所有权,以及将当前线程作为新所有者的条件分配,都必须由其他线程自动进行。 这保留了锁的完整性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.