现在有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()??不知这样说大家是否能看懂- -!
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()??不知这样说大家是否能看懂- -!
while(!hasFinished)
{
wait();
}
这个贴子
http://community.csdn.net/Expert/topic/4990/4990314.xml?temp=.9157373你可以看看大侠们的说的你可以给方法C加个锁啊!这个关键字,synchronized,你找找,可以实现你说的
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();
}
}
}