1).线程被唤醒后会继续执行wait()后面的语句,使用while循环是为了检查唤醒后SyncStack是否满足条件,用if会出现问题
2).从wait()后面的语句执行
3).不太明白你的意思,方法1:同步公用对象.方法2:A.yield();B.yield();C.yield();

解决方案 »

  1.   

    1.  while  本身和 if 就不一样。  while  当 判断条件成立的时候 会不停的执行 while 内部循环 直到条件改变 程序跳出循环。  if  只对条件判断一次 如果成立 则执行一次 反之则不执行 直接到 下一个语句。
      

  2.   

    to:juyin(juyin) 
      呵呵,你解释的真好,我明白了1,2,真是谢谢!第3个是这样的:
    举例来说:有三个线程,每个线程都要打印1和2两个数字,但第一个线程先打印1,接着第2个线程打印1,接着第3个线程打印1,然后第一个线程先打印2,接着第2个线程打印2,接着第3个线程打印2,程序结束。输出应该是这样的:1 1 1 2 2 2不知道该这样调整线程间的顺序?使线程能一个接一个的打印
      

  3.   

    1. pop那个线程被唤醒后不会马上执行wait后的语句,而是等待push线程释放锁后,它才能和其他线程竞争这个锁,所以不一定能竞争成功,如果竞争不成功的话,仍会处于阻塞状态,直到竞争成功为止,但这时条件可能又已经不满足了,所以还得要判断一次,所以只能用while。2. 被唤醒后不一定会马上执行,还需要竞争锁,得到锁之后才会执行wait后面的语句。3. 用yield不能保证顺序,只能增加机会,可以用sleep时间来控制,但也不能完全保证。我想可以作一个控制程序,当各个线程都sleep时,通过它来intterupt下一个执行的线程。