Java非同步线程,该答案如何出现以及如何解释

时间:2018-08-22 11:29:55

标签: java multithreading synchronization explain

可能有两个结果? (选择两个)

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;
            }
        }
    }
}
  • 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,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的。

1 个答案:

答案 0 :(得分:0)

  

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

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