在这段代码中,MyThread类中的out
变量需要声明为volatile吗?还是ThreadTest类中stdout
变量的"可挥发性"会传递过来?
import java.io.PrintStream;
class MyThread implements Runnable
{
int id;
PrintStream out; // should this be declared volatile?
MyThread(int id, PrintStream out) {
this.id = id;
this.out = out;
}
public void run() {
try {
Thread.currentThread().sleep((int)(1000 * Math.random()));
out.println("Thread " + id);
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public class ThreadTest
{
static volatile PrintStream stdout = System.out;
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
new Thread(new MyThread(i, stdout)).start();
}
}
}
volatile
限定符是非冗余的。 - Stephen Crun
方法中。 - Stephen Cvolatile
? - Marcelo Cantosout
的旧副本。这就是Java内存模型的全部内容。我强烈建议您阅读我的答案链接到的JLS章节。 - Stephen C