有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java创建新线程是否会产生刷新缓存的副作用?

我想知道在Java中创建新线程是否会触发缓存刷新。假设我这样做,按照这个顺序:

  1. 线程运行并设置变量X
  2. 该线程创建一个新线程
  3. 新线程访问X

我的问题是:新线程(无论是在创建时还是在开始执行时)是否保证可以看到旧线程在步骤1中对X进行的更新?我知道,如果旧线程在将来更改X的值,则不能保证新线程会看到这些更改。没关系。我只想知道新线程在启动时是否会看到正确的值,而不需要显式同步

当我第一次决定研究这个话题时,我以为一个简单的谷歌搜索会立即发现答案,但由于某种原因,我找不到任何解决这个问题的结果


共 (1) 个答案

  1. # 1 楼答案

    是的

    在java中,有一个“before”关系指定两个动作之间可见的记忆效果。如果“A发生在B之前”,那么动作B保证看到动作A所做的所有更改

    启动线程会在“thread.start()”调用和在新线程上执行的所有代码之间创建“before”关系。因此,新线程保证在第一个线程上看到更改变量X的内存效果

    要快速了解before关系,请参阅java的Memory Visibility部分。util。并发包概述。在你的例子中,有趣的是:

    • 线程中的每一个动作都发生在该线程中的每一个动作之前,该线程中的每一个动作都是按照程序的顺序进行的
    • 对线程的启动调用发生在已启动线程中的任何操作之前

    如果你好奇,请点击更多链接: