我尝试将代码运行到this question的已接受答案,并且它在我的计算机上无限期运行。引擎盖下导致这种行为的是什么?即什么是一个线程看到另一个线程不是?人们谈论缓存'那个没有刷新到主内存但是这个缓存在哪里?它位于JVM中,是CPU内存缓存还是CPU寄存器?
答案 0 :(得分:0)
正如您所指出的问题所解释的那样,没有volatile关键字的变量可能会被编译器,JIT,处理器以任何方式进行优化,因此不会从共享内存中读取。因此,变量可以存储在线程的CPU寄存器中,并且它具有两个具有不同值的单独变量(一个通过线程)。
这解释了{% for childpage in page.header.children %}
<a href="{{childpage.url}}">{{ childpage.title}}</a>
{% endfor %}
关键字有用的原因。如果没有此关键字,这段代码可能会或可能无法正常工作。
其中是缓存问题很难回答,因为我认为,没有好的答案。它可能在任何层上。
修改:@polygnome在评论中发布的链接非常棒。你一定要读它。