解决方案 »

  1.   

    这么简单的问题,还百思不得其解?
    我们如果把thread1和thread2两个线程合并起来之后,赋值的执行顺序可能有一下几种情况。
    最后一句的输出输出的是局部变量,所以可以不用考虑它的顺序。
    -----------------1------------------
    y = 1;
    x = 1; 
    int r1 = x;
    int r2 = y;
    System.out.println(r1 + ", " + r2);-----------------2------------------
    int r1 = x;
    int r2 = y;
    y = 1;
    x = 1; 
    System.out.println(r1 + ", " + r2);
    -----------------3------------------
    y = 1;
    int r1 = x;
    x = 1; 
    int r2 = y;
    System.out.println(r1 + ", " + r2);-----------------4------------------
    y = 1;
    int r1 = x;
    int r2 = y;
    x = 1; 
    System.out.println(r1 + ", " + r2);-----------------5------------------
    int r1 = x;
    y = 1;
    int r2 = y;
    x = 1; 
    System.out.println(r1 + ", " + r2);-----------------6------------------
    int r1 = x;
    y = 1;
    x = 1; 
    int r2 = y;
    System.out.println(r1 + ", " + r2);
    你针对每种情况,看看最终输出值是什么,就知道了。
      

  2.   

    这里如果去掉velotile关键字,打印结果都一样,为什么会出现这个情况呢。
      

  3.   

    - -差点被骗了,跟velotile有毛关系,就是线程的延迟而已,executedByThread1() 这个方法说明了,当且仅当y=1时,才能为x=1。 这里陷阱就是:赋值和输出,X和Y的处于不同位置的。