gpt4 book ai didi

java - volatile key 未按预期工作

转载 作者:行者123 更新时间:2023-12-01 06:50:34 26 4
gpt4 key购买 nike

正在编写示例应用程序来了解不稳定的行为。根据我的说法,这个变量的值应该更改为 50,但我得到的输出是 10

主要方法:

public class Volatile {
public static void main(String[] args) {
ShareObj so = new ShareObj();
Thread1 t1 = new Thread1(so);
Thread2 t2 = new Thread2(so);
t1.start();
t2.start();
System.out.println(so.a);
}
}

类(class):

class ShareObj {
public volatile int a =10;
}

class Thread1 extends Thread {
ShareObj so;
Thread1(ShareObj so) {
this.so = so;
}
public void run() {
so.a += 10;
System.out.println(so.a);
}
}

class Thread2 extends Thread {
ShareObj so;
Thread2(ShareObj so) {
this.so=so;
}
public void run() {
so.a+=10;
System.out.println(so.a);
}
}

我期望的输出是50,但它是10

有什么建议吗?

最佳答案

首先,您需要等待两个线程完成,然后再打印其结果。

...
t1.start();
t2.start();
t1.join(); // this will make main thread to wait untill thread is finished
t2.join();
.....

目前,您正在声明两个线程,但在它们中的任何一个可以更改 volatile 值之前,您的主线程已获取值并退出。

文档是 here .

关于java - volatile key 未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31001655/

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