Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关于java volatile数组_Java_Volatile - Fatal编程技术网

关于java volatile数组

关于java volatile数组,java,volatile,Java,Volatile,我对易失性数组有一个问题。在互联网上,大多数人说数组的元素不一定是易变的,只是它的引用是易变的。所以我写了一些代码来检查它。结果证明,它是有效的 我使用的是Windows10+JDK8 我的代码: static volatile boolean[] keepRunnin g= { true }; public static void main(String[] args) throws Exception { new Thread( ()->{

我对易失性数组有一个问题。在互联网上,大多数人说数组的元素不一定是易变的,只是它的引用是易变的。所以我写了一些代码来检查它。结果证明,它是有效的

我使用的是Windows10+JDK8

我的代码:

static volatile boolean[] keepRunnin g= { true };

public static void main(String[] args) throws Exception {

    new Thread(
        ()->{
            while (keepRunning[0]){}
        }
    ).start();

    Thread.sleep(1000);

    keepRunning[0] = false;
}
循环总是结束的,它不是无限循环


有人能解释一下吗?

不可能编写代码来证明数组中的元素在所有线程应该看到的时候总是可见的

您的示例可能会证明它在某些情况下对您有效(我没有运行它),但您无法确定它是否会在所有硬件、所有用户、所有时间都有效


只有编写代码才能证明某些东西在线程之间是可见的。不可能编写代码来证明它。

不可能编写代码来证明数组中的元素在所有线程应该看到的时候总是可见的

您的示例可能会证明它在某些情况下对您有效(我没有运行它),但您无法确定它是否会在所有硬件、所有用户、所有时间都有效


只有编写代码才能证明某些东西在线程之间是可见的。编写代码来证明它是不可能的。

那么为什么大多数人说它在多个线程之间是不可见的呢?因为它可能是不可见的。如果某些东西不能保证是可见的,我们必须假设最坏的情况:它是不可见的。你能提供一个例子说明这个例子在其他环境中不会结束循环吗?那么为什么大多数人说它在多个线程之间是不可见的?因为它可能是不可见的。如果某些东西不能保证是可见的,我们必须假设最坏的情况:它是不可见的。你能提供一个例子说明这个例子在其他环境中不会结束循环吗?