java-易失性对象的字段不可见?
有人有一些演示代码来证明这一点吗 我从中看到了“不”的答案 但是我不理解这篇文章的例子。读写线程都已启动,然后加入java-易失性对象的字段不可见?,java,volatile,Java,Volatile,有人有一些演示代码来证明这一点吗 我从中看到了“不”的答案 但是我不理解这篇文章的例子。读写线程都已启动,然后加入 writerThread.start(); readerThread.start(); writerThread.join(); readerThread.join(); 我认为w.start->w.join->r.start->r.join应该是正确的。但按照这个顺序,结果是不同的(w.start->w.join->r.start->r.join将基本上使其同步,因为您正在启动
writerThread.start();
readerThread.start();
writerThread.join();
readerThread.join();
我认为w.start->w.join->r.start->r.join应该是正确的。但按照这个顺序,结果是不同的(
w.start->w.join->r.start->r.join
将基本上使其同步,因为您正在启动w
,然后等待它完成,然后再启动r
文章说的是正确的,字段将对所有线程可见,问题是声明的字段一次只能访问或写入一个在w
中有一个1U睡眠。可能readThread在此期间读取了a&b,因此a&b的结果不同。它无法证明标题。java-volatile对象的字段在任何地方都不可见-beeing volatile与可见性无关。您看到的是不同的故事。您是对的。本文只是证明了这一点米西蒂,不是能见度。