gpt4 book ai didi

java - 线程进入synchronized block 后可以换锁吗?

转载 作者:行者123 更新时间:2023-11-30 11:39:39 28 4
gpt4 key购买 nike

我问这个问题只是出于好奇,我知道这样做是愚蠢的。

public void doSomething() 
{
synchronized(object_A){
count++;
average = count/total;
}
}

现在假设我有 2 个线程并发运行(调用函数 doSomething()),而第一个线程已经进入 block ,假设在“count++”行,第二个线程被阻塞并等待锁。

现在我尝试执行 object_A = new LockObject()(在另一个线程中)。现在线程 1 和线程 2 发生了什么?

线程2会不会进入block?既然已经执行了语句“synchronized(object_A)”,现在换锁还来得及吗?

线程 1 是否会在同步块(synchronized block)中更改锁(假设线程 1 仍在同步块(synchronized block)中)?

最佳答案

就像 ignis 所说的,但是线程 2 将在线程 1 完成后看到新的引用,因为它必须刷新所有变量。

关于java - 线程进入synchronized block 后可以换锁吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13155629/

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