gpt4 book ai didi

java - 由于同步顺序,以下Java程序是否必须打印 "num:1 m_i:2 "

转载 作者:搜寻专家 更新时间:2023-11-01 03:44:10 26 4
gpt4 key购买 nike

我只是想检查一下我对JMM的线程启动同步规则的理解是否正确:

下面的Java程序是否因为下面的同步顺序就必须打印“num:1 m_i:2”。

http://java.sun.com/docs/books/jls/third_edition/html/memory.html#17.4.4


启动线程的操作与它启动的线程中的第一个操作同步。

public class ThreadHappenBefore {
static int num;
int m_i;

public static void main(String[] args) {
final ThreadHappenBefore hb = new ThreadHappenBefore();
num = 1;
hb.m_i = 2;

new Thread(new Runnable() {
@Override
public void run() {
System.out.println("num:"+num);
System.out.println("m_i:"+hb.m_i);
}
}).start();
}
}

最佳答案

其他代码之前编码的任何代码都保证给定线程中的其他代码之前当前面的代码对后面的代码产生影响时强>.因为线程启动是在赋值之后编码的,并且赋值影响打印语句的结果,所以这些赋值是“可见的”(即发生在之前)打印它们的代码。

但是,从另一个线程来看,执行顺序的效果并没有这样的保证。

已编辑(感谢评论者)

在上面关于重新排序的内容中添加了一个细化(粗体)。

关于java - 由于同步顺序,以下Java程序是否必须打印 "num:1 m_i:2 ",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6722962/

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