繁体   English   中英

运行代码和调试时的意外行为[重复]

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM