gpt4 book ai didi

java - 一个关于Java多线程的问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:45:10 24 4
gpt4 key购买 nike

假设下面的类

public class TestObject{
public void synchronized method1(){
//some 1000 lines of code
}

public void method2(){
//some 1000 lines of code
}
}

假设有两个线程访问同一个 TestObject 类实例,我们称它们为 t1 和 t2。我想知道在以下情况下会发生什么。

  1. 当 t1 正在访问 method1() 的中途时。现在 t2 正在尝试访问 method2()。
  2. 当 t1 正在访问 method2() 的中途时。现在 t2 正在尝试访问 method1()。

我的理解是,对于第一个问题,线程 t2 不会被授予权限,因为 object 将被 t1 锁定。对于第二个问题,线程 t2 将被授予访问权限并锁定对象,并停止执行 t1。但我的假设是错误的。谁能解释一下?

谢谢

最佳答案

只有带有关键字 synchronized 的方法在该方法中运行线程时才持有 this 对象的锁。
如果方法 1 和方法 2 都被声明为同步的,一个线程将阻塞另一个,即使它们正在尝试运行不同的方法。
在您的示例中,只有 1 个方法被隐式锁阻塞。
因此,t1 和 t2 可以在方法 1 和方法 2 中同时运行(反之亦然)。
仅在尝试访问方法 1 时,如果已获取锁,则 t1 或 t2 会阻塞

关于java - 一个关于Java多线程的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4051185/

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