其实这个运行结果应该是不确定的,不信你可以多试几次,运行的不一定每一次都一样,因为谁也无法确定是accountant还是cashier运行的快,跟很多因素都有关系。

解决方案 »

  1.   

    因该是 线程同步 问题
    把 update 声明为 synchronized 试试
      

  2.   

    执行过程如下:
    money = 100+30;
    Thread.sleep(1000);//accountant
    money = 130-15;
    Thread.sleep(1000);//cashier
    j ++;
    text1.append("\n" + String.valueOf(j) + ". " + money);
    j ++;
    text2.append("\n" + String.valueOf(j) + ". " + money);以后每轮都依照此顺序进行,所以每次结果加15。造成这种现象的根本原因是线程少,而sleep的时间长,
    你可以多开几个线程,sleep并把时间设为1。
      

  3.   

    我是想看看:把synchronized去掉了是什么效果。
    我不明白为什么会有3×5=15个数字?
    for (int i=1;i<=3 ;i++ )
      {
       update(30);
      }
     每执行一次update(30)为什么会有5个数字输出?我觉得应该是3个或2个。
      

  4.   

    Thread accountant为3×3=9个,
    Thread cashier 为3×2=6个。
    没错啊.
      

  5.   

    为update加上synchronized后,为什么accountant线程执行完一次update(30)后,紧接着cashier线程又执行一次update(30),而不是:先accountant执行完update(30)3次后,cashier再执行3次?
    accountant线程执行完一次update(30)后,当前的线程不还是accountant吗,那么此线程应该紧接着执行第二、三次循环,然后才轮到cashier?
      

  6.   

    my dear friends,please answer me!!!