[英]Unexpected behavior while running the code and debugging [duplicate]
而调试结果为 77777,否则为 97777。如果我们移动System.out.println(Thread.currentThread().getName()) ;,则行为相同。 在打印代码时向上和向下。 任何解释?
public class Concepts extends Thread {
int code = 9;
public void run() {
this.code = 7;
}
public static void main(String[] args) {
Concepts co = new Concepts();
co.start();
for (int i = 0; i < 5; i++) {
System.out.print(co.code + "==");
System.out.println(Thread.currentThread().getName());
}
}
}
您正在执行第二个线程,该线程在没有任何同步的情况下将code
实例变量设置为7
。
然后您从主线程访问code
变量,同样没有任何同步。
这意味着主线程可能会在其他线程将代码变量设置为7
之前看到code
变量的状态(这意味着它会打印9
直到它观察到其他线程所做的更改),或者它可能不会(这意味着它只会打印7
秒)。 这完全取决于哪个线程将首先运行。
如果没有同步,您就没有理由期望一个结果优于另一个结果。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.