本文是JSR-133规范,即关于Java内存模型和线程规范,由JSR-133专家组开发。本规范是JSR-176的一部分(概括了Java平台Tiger(5.0)发布版的主要特性),本规范的标准内容将被合并到Java语言规范(JLS)、Java虚拟机规范(JVMS)以及java.lang包的类说明中。JSR-133规范将不再通过JCP(Java community process)维护和修改。未来所有对这些标准化内容的更新、更正以及说明都会出现在上述文档中。
本规范的标准化内容包含在5、7、9.2、9.3、11、12、14、15、16节中。其他章节以及上述提及的章节的部分内容,属于非标准化内容,用以解释和说明标准化内容。如果标准化内容和非标准化内容之间存在冲突,以标准化内容为准。
本规范的讨论与开发异常复杂和专业,需要对一些学术论题有深刻的见解并感知其发展方向。这些讨论在JMM网站上都有存档(并且讨论还在继续)。该网站提供了额外的信息,可以帮助理解本规范的形成过程;网址是:
该web站点以及邮件列表将持续更新和维护,并且用以帮助人们理解JSR-133规范的非标准化内容更新和扩展,可从该站点访问到。
来自于JLS原始规范中的两个变化极有可能导致JVM相关实现发生变化:
- volatile变量的语义被加强,需要有acquire和release语义。在原来的规范中,对volatile和非volatile变量的访问操作,可被随意排序。
- 加强了final属性的语义,无需显式采用同步,不可变对象也是线程安全的。这可能需要在给final字段赋值的那些构造器末尾加上store-store之类的屏障。
1 介绍
Java虚拟机支持多线程执行。线程通过Thread类来表示。用户创建线程的唯一方式是创建一个Thread类的对象;每一个线程都关联着一个Thread对象。当线程对象的start()方法被调用时,线程就会启动。
线程的行为,尤其是没有正确同步时的行为,可能会是混乱、违背直觉的。