日期:2014-05-20  浏览次数:20730 次

哪位给看下这个示例程序
谁愿意帮我看下这个示例程序,
Bank类中的成员函数transfer里面
while   (accounts[from]   <   amount)
                        wait();
用来阻塞钱数不够的操作
但是为何这里要用while呢?
谁能帮忙解释下
谢了


/**
  *   @version   1.20   1999-04-26
  *   @author   Cay   Horstmann
  */

public   class   SynchBankTest
{     public   static   void   main(String[]   args)
      {     Bank   b   =   new   Bank(NACCOUNTS,   INITIAL_BALANCE);
            int   i;
            for   (i   =   0;   i   <   NACCOUNTS;   i++)
            {     TransferThread   t   =   new   TransferThread(b,   i,
                        INITIAL_BALANCE);
                  t.setPriority(Thread.NORM_PRIORITY   +   i   %   2);
                  t.start();
            }
      }

      public   static   final   int   NACCOUNTS   =   10;
      public   static   final   int   INITIAL_BALANCE   =   10000;
}

class   Bank
{     public   Bank(int   n,   int   initialBalance)
      {     accounts   =   new   int[n];
            int   i;
            for   (i   =   0;   i   <   accounts.length;   i++)
                  accounts[i]   =   initialBalance;
            ntransacts   =   0;
      }

      public   synchronized   void   transfer(int   from,   int   to,   int   amount)
      {     try
            {     while   (accounts[from]   <   amount)
                        wait();
                  accounts[from]   -=   amount;
                  accounts[to]   +=   amount;
                  ntransacts++;
                  notifyAll();
                  if   (ntransacts   %   NTEST   ==   0)   test();
            }
            catch(InterruptedException   e)   {}
      }

      public   synchronized   void   test()
      {     int   sum   =   0;

            for   (int   i   =   0;   i   <   accounts.length;   i++)
                  sum   +=   accounts[i];