gpt4 book ai didi

java同步和对象锁

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:29:30 24 4
gpt4 key购买 nike

假设我有两个线程。 Thread1正在访问一个synchronized方法,同时Thread2正在访问同一个对象的另一个synchronized方法。据我所知,Thread2 应该等到 Thread1 完成它的任务。我的问题是,Thread2 是否在对象的等待线程列表中?对我来说似乎是这样,但是 Thread2 没有调用 wait() 方法,那么作为逻辑结果,它不应该在对象的等待线程列表中。如果它不在对象的等待线程列表中,Thread2 的状态是什么?

最佳答案

当 Tread2 正在等待 Thread1 释放 Thread1 持有的内在锁时,它的阻塞直到内在锁变得可用(如 u 被执行线程 Thread1 释放)。因此,在夏季,Thread2 正在等待锁被释放,因此它可以获得它。

现在,当线程调用 wait() 时,它必须已经持有内在锁。调用 wait() 然后释放锁,并将线程置于等待状态,等待来自 notify() 的信号> 或 notifyAll() 继续执行。

因此,这两种情况是不同的,前者是隐式地阻塞执行直到资源(锁)可用。而后者是关于显式释放已经持有的锁,然后等待一个信号,表明是时候重新获取锁并继续了。

关于java同步和对象锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16310717/

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