Java 是第一个试图写下多线程程序保证的主流语言。它包括:

  • 互斥体(mutex),并定义了它们隐含的内存排序要求。
  • “volatile” 原子变量: volatile 变量的所有读和写都需要直接在主内存中按程序顺序执行,使得对 volatile 变量的操作以顺序一致的方式进行。
  • 制定了(或者至少试图制定)具有数据竞争的程序的行为。

缺陷

  1. Atomic 需要同步:volatile 原子变量是不同步的,所以它们无助于消除程序其余部分的竞争。不能用于构建新的同步原语。
  2. 一致性与编译器优化不兼容:Java 编译器公共子表达式消除(common subexpression elimination)会导致其他线程写入新值无法对消除后表达式生效。