首页 > 解决方案 > 线程内一致性

问题描述

代码很简单。

// not annotated with volatile
public static int I = 0;

public static int test(){
    I = 1;
    return I;
}

有一个调用该方法的线程test

该方法是否有可能test返回值“0”?

换句话说,共享变量的读取可能看不到同一线程的修改。


更新

这个问题很简单,但我让它晦涩难懂,我真的很抱歉。

a thread手段a single thread。_

问题与重复。

标签: javavolatilejava-memory-model

解决方案


不,如果不涉及其他线程,但将调用该方法,它将为1

chrylis -cautiouslyoptimistic的答案对于另一种情况也值得一读。

两个原因:

  • I只是由它的所有者更改,如果另一个线程只是调用 test(),则没有选项可以将 0 作为I' 值。
  • 第二个线程不会读取Class.I的值,而是方法的结果test()分配I=1发生在返回之前,因此保证提供最新的更新值(仅由所有者更新一次)。

推荐阅读