Java非同步线程,这个答案怎么会出现,怎么解释

Java非同步线程,这个答案怎么会出现,怎么解释,java,multithreading,synchronization,explain,Java,Multithreading,Synchronization,Explain,哪两个是可能的结果?(选择两个) 公共级巡洋舰{ 私有INTA=0; 公共图书馆{ Runnable r=新的LittleCruiser(); 新线程(r.start(); 新线程(r.start(); } 公共静态void main(字符串arg[]){ 巡洋舰c=新巡洋舰(); c、 foo(); } 公共类LittleCruiser实现Runnable{ 公开募捐{ int电流=0; 对于(int i=0;i

哪两个是可能的结果?(选择两个)

公共级巡洋舰{
私有INTA=0;
公共图书馆{
Runnable r=新的LittleCruiser();
新线程(r.start();
新线程(r.start();
}
公共静态void main(字符串arg[]){
巡洋舰c=新巡洋舰();
c、 foo();
}
公共类LittleCruiser实现Runnable{
公开募捐{
int电流=0;
对于(int i=0;i<4;i++){
电流=a;
系统输出打印(当前+“,”);
a=电流+2;
}
}
}
}
  • A) 0,2,4,0,2,4,6,6
  • B) 0,2,4,6,8,10,12,14
  • C) 0,2,4,6,8,10,2,4
  • D) 0,0,2,2,4,4,6,6,8,8,10,10,12,12,14,14
  • E) 0,2,4,6,8,10,12,14,0,2,4,6,8,10,12,14
正确的答案是A和B,但是我不太明白这段代码是如何在较低级别生成A的

A) 0,2,4,0,2,4,6,6


嗨,Daria-欢迎来到Stack Overflow。如果你在展示你已经完成的工作(而不仅仅是问答案),那么在这里问家庭作业问题是受欢迎的。请看这里的帮助中心:顺便说一下,我认为这段代码根本无法生成任何输出,因为它甚至无法编译。公共类LittleCruiser需要在其自己的源文件中定义。@ErwinSmout Java允许classes@ErwinSmout哦,好吧,bbe试着在Intellij Idea上运行它,你会发现输出A和B都是可能的,再加上一些。
public class Cruiser {

    private int a = 0;

    public void foo() {
        Runnable r = new LittleCruiser();
        new Thread(r).start();
        new Thread(r).start();
    }

    public static void main(String arg[]) {
        Cruiser c = new Cruiser();
        c.foo();
    }

    public class LittleCruiser implements Runnable {
        public void run() {
            int current = 0;
            for (int i = 0; i < 4; i++) {
                current = a;
                System.out.print(current + ", ");
                a = current + 2;
            }
        }
    }
}
Thread-1: read a = 0;
Thread-2: read a = 0;
Thread-1: output 0, 2, 4 
Thread-2: output 0
Thread-2: write 2 back to a
Thread-2: output 2, 4, 6
Thread-2: write 6 back to a;
Thread-1: read a = 6 and output 6