多线程“虚假唤醒”注意

在使用多线程时,尤其是生产者消费者,或者多生产多消费者模式中,尤其要注意。当一个线程处于等待状态时(使用wait方法和JDK1.5及之后的Condition的await方法可以使线程处于等待状态),必须使用同一锁的其它线程来唤醒或者唤醒所有线程(使用notify或notifyAll方法或者JDK1.5之后的Condition的signal或signalAll方法)才会醒来,但是也有一种可能,就是“虚假唤醒”,即并没有其它线程来唤醒会自己醒来,所以这里就要注意了,在判断某个条件满足的时候,使其睡眠,不要使用if,要使用while。如下:

		while(条件){
			//wait或await方法
		}

jdk中的说明:

多线程“虚假唤醒”注意_第1张图片

你可能感兴趣的:(多线程)