Java 为什么在我的macbook pro中,多线程中没有Visiability变量始终可以得到一个结果;
为什么在我的macbook pro中,多线程中没有Visiability变量始终可以得到一个结果Java 为什么在我的macbook pro中,多线程中没有Visiability变量始终可以得到一个结果;,java,multithreading,Java,Multithreading,为什么在我的macbook pro中,多线程中没有Visiability变量始终可以得到一个结果 public class NoVisiability { private int count = 1; private boolean ready = false; public void read() { if (ready) { count = count * 3; } System.out.pr
public class NoVisiability {
private int count = 1;
private boolean ready = false;
public void read() {
if (ready) {
count = count * 3;
}
System.out.printf("the count is %s", count);
}
public void write() {
count = 2;
ready = true;
}
public static void main(String[] args) {
NoVisiability noVisiability = new NoVisiability();
noVisiability.new ReaderThread(true).start();
noVisiability.new ReaderThread(false).start();
}
private class ReaderThread extends Thread {
private boolean flag;
public ReaderThread(boolean flag) {
this.flag = flag;
}
@Override
public void run() {
if (flag)
write();
else
read();
}
}
}
共享变量可以重新排序;
结果可以是6,0,3;
但是我运行了很多次,结果总是6可能是Mac中的JVM决定在同一个线程中执行所有操作。第一个线程很可能在第二个线程开始之前完成 为了加强并发性,我建议使用这个类
您可以创建一个count=1的线程,在“public void run”的第一行等待,并在创建和启动两个线程后触发它。您的问题很难理解。请提供有关您共享的代码的更多信息,例如它的功能、预期输出以及实际输出。很可能您的写线程在读线程开始之前就已经完成了。它可能也在同一个处理器上运行。