gpt4 book ai didi

java - 线程和同步示例

转载 作者:行者123 更新时间:2023-11-29 10:19:51 24 4
gpt4 key购买 nike

我是 Java 新手。下面是一个代码作为线程和同步的例子。

public class A implements Runnable{
public synchronized void run(){

/*
some code here
*/

}
}

public class B {
public static void main(String[] args){
A obj1 = new A();
Thread t = new Thread(obj1);
A obj2 = obj1;
Thread t1 = new Thread(obj2);
t.start();
t1.start();
}
}

现在这两个线程会因为同一个锁而互相阻塞还是会得到两个不同的锁?

谢谢!!

最佳答案

(首先,请遵守 Java 编码约定。类名应始终以大写字母开头。没有异常(exception)。)

一次只有一个线程会执行run()方法。

A.run() 方法是一个实例方法,声明为synchronized。这两个事实意味着它将在进入方法体之前获取对 this(即 A 的实例)的锁定,并在退出时释放它。简而言之,run() 锁定了 this

因此,在您的主程序中,您正在创建单个 A 实例并将其作为 target 对象传递给两个线程。它们都需要在同一个对象上执行 run() 方法,并且这不能同时发生……根据上一段的推理。

这并不一定意味着一个线程会阻塞另一个线程。也有可能第一个要启动的线程在第二个线程准备好尝试调用之前完成其 run() 调用。但是我们可以说……明确地……两个线程对 run() 的调用在时间上不会重叠。

关于java - 线程和同步示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8542020/

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