现在有A和B两个定时任务类, 还有一个业务类C, A每隔10分钟调用一次C执行业务, 同时B每天凌晨0点也会调用C执行业务, C类里有一个标志hasFinished用来判断一次任务是否执行完毕,比如private boolean hasFinished = true;public void doBiz(){
   if(hasFinished==true){
       //开始执行任务
       hasFinished = false;
       //执行业务
       ......
       //任务结束
       hasFinished = true;
   }
}由于A一直在调用C的doBiz(),所以如果B在每天凌晨0点调用C的doBiz时,A的调用还没结束,也就是说hasFinished还是false,这样B就不会执行doBiz()里的业务了,请问怎么样在B里做判断,如果C的hasFinished=false就一直等待,直到hashFinish=true了就马上唤醒B执行doBiz()??不知这样说大家是否能看懂- -!

解决方案 »

  1.   

    B的判断
    while(!hasFinished)
    {
    wait();
    }
      

  2.   

    忘记说了,我昨天今天刚研究一个多线程例题
    这个贴子
    http://community.csdn.net/Expert/topic/4990/4990314.xml?temp=.9157373你可以看看大侠们的说的你可以给方法C加个锁啊!这个关键字,synchronized,你找找,可以实现你说的
      

  3.   

    因为方法C比较庞大, 可能执行的时间比较长, 我担心的是在方法上加了synchronized之后会导致线程阻塞,所以在C用hasFinished来判断,这样大不了这次不执行下次再执行,也不会阻塞
      

  4.   

    把b放到a里,a在0点时判断是否运行完毕,运行完就执行b,另外应该再加一个b运行完毕的标识,以免多次执行b
      

  5.   

    这样应该可以:
    private boolean hasFinished = true;
    private int[] lock = new int[0];public void doBiz(){
       while(!hasFinished){
          synchronized(lock){
             lock.wait();
          }
       }
       if(hasFinished==true){
           //开始执行任务
           hasFinished = false;
           //执行业务
           ......
           //任务结束
           hasFinished = true;
          synchronized(lock){
             lock.notify();
          }
       }
    }