呵呵,没问题啊,你的是FinTrans里的两个变量都是static的,而static的变量对于一个class而言是共有的,不管你new 多少个object它们都共用一个static变量,更何况你只new了一个,当然输出的是最后一次更新,至于时间的输出,你sleep的是一个random长的时间,所是先执行那一个线程是不一定的。

解决方案 »

  1.   

    这里是同一个线程,只不过如果
    if (getName ().equals ("Deposit Thread")) 

    ft.transName = "Deposit"; 
    try 

    Thread.sleep ((int) (Math.random () * 1000)); 

    catch (InterruptedException e) 


    ft.amount = 2000.0; 
    System.out.println (ft.transName + " " + ft.amount); 
    } 这段执行了Thread.sleep ((int) (Math.random () * 1000)); 后为什么不是整个线程hold住,而是else{}那段会在下一个线程片刻里面执行了
      

  2.   

    你起来的是两个线程,它们之间互相没有影响。也就是当一个进入休眠的时候,另一个线程是可以工作的,输出的结果是正确的,因为你的ft.amount值在ft.amount = 250.0; 后另一个线程将其改成ft.amount = 2000.0; 所以输出为Deposit 2000.0 。这也是由于你给两个线程公用了一个变量的结果!
      

  3.   

    TT1与TT2的休眠时间是随机的,当一个休眠时另一个可能对FinTrans 的属性进行修改