我一直在努力理解Java内存模型和多线程的多线程。 JLS 8部分的相应JLS 17.4说:
要确定执行中的线程t的 操作是否合法 ,我们 简单地评估线程t的实现 在单线程上下文中执行,如其余部分所定义 说明书
我强调的这句话在这种情况下意味着什么?我的意思是我无法想象执行中线程的合法和非法操作。你能给出一个例子吗?
答案 0 :(得分:2)
这是语言规范;它用于指导JVM编写者的程序必须表现的一件事。编写JVM的人需要知道该语言的规则是什么;语言的限制是他们实施的。因此,他们可以编写非法的代码'就规范而言。
让我们说正在编写的JVM决定做一些优化 - 它会使他们的JVM执行代码比没有优化时更快,也许比没有进行优化的其他JVM更有优势。 。他们可以做的一件事是重新排序操作,将它们移出循环或其他任何东西。但在这样做时,他们犯了一个错误,违反了规范的规则。在您引用的上下文中,该JVM代码将是非法的。