java - 内存一致性属性解释

标签 java multithreading memory

我正在看https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/package-summary.html#MemoryVisibility并且难以理解这意味着什么 - “线程中的所有操作都发生在任何其他线程从该线程上的连接成功返回之前。”我可以举个例子来说明这意味着什么以及示例中的发生之前保证是什么。

最佳答案

如果你有以下代码

public class Test {

 public static int i = 1;
 public static void main(String[] args) throws Exception {
  System.out.println("Start main");
  Thread t = new Thread(new Runnable() {
    public void run() {
      System.out.println("Start second");
      i = 10;
    }
  });
  t.start();
  t.join();
  System.out.println("After join");
  System.out.println(i); //should print 10
 }
}

run()内完成的一切方法在主线程从 t.join(); 获取控制权之前发生。这就是为什么静态变量 i将有值(value)10在主线程中打印时。

关于java - 内存一致性属性解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48727925/

相关文章:

c++ - mmap的用例

java - 我的 VisualVM 仅显示 Glassfish 和 Netbeans,而不是我在 Netbeans 中打开的一些项目

java - 为什么finally在java中有用?

java - 这个SwingWorker是不是没有复用ThreadPoolExecutor中的Threads?

java - Java 类名中的有效字符

javascript - 异步实际上是如何工作的......?

c++ - 用户运行时环境中的并行进程

multithreading - Redis 有 decr if 功能吗

android - Android 上的日志消息 :/dev/pmem: Unmapping buffer base

c++ - ifstream 到动态分配的数组