Java 运行代码和调试时出现意外行为

Java 运行代码和调试时出现意外行为,java,multithreading,core,Java,Multithreading,Core,而调试结果为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) {

而调试结果为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());
    }
  }
}
公共类概念扩展线程{
int代码=9;
公开募捐{
该代码=7;
}
公共静态void main(字符串[]args){
概念co=新概念();
公司启动();
对于(int i=0;i<5;i++){
系统输出打印(公司代码+“=”);
System.out.println(Thread.currentThread().getName());
}
}
}

您正在执行第二个线程,该线程在不进行任何同步的情况下将
code
实例变量设置为
7

您可以从主线程访问
code
变量,同样不需要任何同步

这意味着主线程可能会在另一个线程将其设置为
7
之前看到
code
变量的状态(这意味着它将打印
9
,直到它观察到另一个线程所做的更改),也可能不会(这意味着它将只打印
7
s)。这完全取决于哪个线程将首先运行


如果没有同步,您就没有理由期望一种结果优于另一种结果。

尝试正确使用代码格式要理解原因,您必须了解有关线程和并发性的一些基本知识。看起来是的。你需要一个关于线程和并发的教程。