gpt4 book ai didi

java - Java 中的锁是如何工作的?

转载 作者:行者123 更新时间:2023-12-01 17:49:34 24 4
gpt4 key购买 nike

假设我有 2 个 CustomThread 实例和一个名为 printer 的公共(public)对象实例。在 printerprint 方法中,如果我执行 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();
}
}
}

我将从我的 2 个线程对象中调用此方法。

我的问题是,该方法如何锁定本身?锁不是基于线程的吗?也许我在这里混淆了核心思想。当我在方法内部进行锁定时,这意味着什么?

最佳答案

您可以将其视为锁有一个名为owner的字段,它是一个Thread

当调用 lock()ownernull 时,owner 被分配给调用线程。当调用 unlock() 时,owner 重置为 null

当调用 lock()owner 不为 null 时(也不是当前线程,因为锁是可重入的) ),调用线程将阻塞,直到另一个线程放弃所有权并且可以将其指定为新所有者。

额外的复杂性是,对当前所有权的检查以及当前线程作为新所有者的条件分配,都必须被其他线程看到以原子方式发生。这保留了锁的完整性。

关于java - Java 中的锁是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51886216/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com