一个关于JAVA线程的问题

来源:百度知道 编辑:UC知道 时间:2024/05/13 10:35:00
我想请教一下高手,为什么JAVA里面的wait方法最好要放在while循环里面呢?请高手回答
放在一个if条件判断里面可以吗?如果不可以,为什么一定要放在循环里面呢?

wait通常是等待资源或别的线程,如果用if,只会判断一次,然后就执行后面的代码.
但是,如果这次判断后,这个线程所要求的资源没有被释放,那么,它本来应该再等待,但是,你使用的if使它直接执行了后面的代码,这样就不对另外.
如果用while,那么每次wait后都会判断资源是否可用,这样,直到资源可用时才可以执行后面的代码.
比如:
resource是一个资源,amount是resource的个数,A是一个线程
if(resource.amount<=0){
A.wait();
}
resource.amount--;

while(resouce){
A.wait();
}
resource.amount--;
当resouce的个数为0时,
对于第一个,那么在A.wait()后如果resource.amount还是=0,则
执行resource.amount--后,resource.amount=0,显然出问题
对于第二个,在A.wait()后如果resource.amount还是=0,A还是会wait(),直到resouce.amount>0,然后resource.amount--,此时,resource.amount>0.
这样就不会出错.

如果你确认方法wait一次就能做完,当然可以用if+wait方法了,但一般在应用中,可能需要执行wait后的操作多次,所以用while+wait方法。