gpt4 book ai didi

java - Java中的线程如何访问基元

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

请看下面的代码-

class A {
public int a;
public int b;
}
A a = new A();

new Thread(new Runnable() {
public void run() {
System.out.println(a.a +" "+ a.b);
}
}).start();

new Thread(new Runnable() {
public void run() {
a.a = 1;
a.b = 3;
}
}).start();

new Thread(new Runnable() {
public void run() {
a.a = 2;
a.b = 4;
}
}).start();

我知道在多线程环境中无法预测上述输出。一个类的实例公开了在这里由两个线程进行更新,并且它的状态不是线程安全的,当我运行代码时,我得到的是{0 0},{2 4}和{1 3}之间的输出。是否可以输出为{1 4},{2 3},{0 4}或{2 0}?为什么或者为什么不 ?

最佳答案

对于特定的代码段,在特定版本的JVM上可能是不可能的,但是在通常情况下是可能的,因为Java语言规范不能保证执行的顺序。由于在构造之前没有任何事件发生,因此可以对赋值语句进行重新排序。

因此,编写这样的代码,您将不能依赖于它将如何执行。

关于java - Java中的线程如何访问基元,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41871955/

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