gpt4 book ai didi

java - 同步方法中的重入

转载 作者:行者123 更新时间:2023-12-03 13:16:34 25 4
gpt4 key购买 nike

同步方法是否可重入

我有这个代码:

public class Main {

synchronized void m1() {
//some code
m2();
//some code
}

synchronized void m2(){
//some code
}

}

假设两个线程(线程 A 和线程 B)尝试同时访问 m1()线程 A 首先获取。一段时间后,线程 A 调用 m2(),它也在同一个对象上同步。

因为我不想做任何猜测,有人可以告诉我:当线程A调用m2()时,是否能保证会发生什么?我的意思是一旦线程A调用m2(),它是否会“离开锁定”?因为从技术上讲它离开了方法的框架,那么它也会离开锁吗?

[编辑]:线程 A 每次调用它后是否都会运行 m2() ?或者它是否会留下,以便线程 A线程 B 都能为自己的目标而竞争?

最佳答案

在 Java 中,锁是可重入的。如果线程A持有锁,那么它就可以开始执行方法m1。最终它会调用方法m2,因为线程A已经持有锁,所以它不必再次重新获取锁来执行方法m2。在内部,锁保持所有者字段来跟踪这一点。即使锁已经被持有,由于 m2 的调用者是锁的所有者,因此访问被授予。这种设计策略可以防止死锁。

关于java - 同步方法中的重入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64291188/

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