等待通知机制

多线程环境中,经常出现这样一种场景。一个线程修改了一个对象的值,而另一个线程感知到了变化,然后进行相应的操作,整个过程开始于一个线程,最终结束于另一个线程。这就是传说中的生产者/消费者模型(前者是生产者,后者是消费者)。

而实现这种功能比较简单的方法就是让消费者线程不断的循环变量判断是否符合预期。如下所示

while (!isOK(...)){
	Thread.sleep(1000);
}
doIt();

while 循环中设置不满足的条件,如果条件满足则退出循环(睡眠可以防止过快的“无效尝试”)

如果isOK方法的判断逻辑比较简单,操作耗时较短,而且并发冲突量不大的情况下,使用这种方案也未尝不可。但是如果判断逻辑比较复杂,或者并发冲突较大时。这种方案就不行了,while循环会执行很多很多次,CPU消耗较大。

针对这种问题,Java内置的等待通知机制能够较好的解决。当条件不满足时,线程阻塞自己,进入等待状态。当线程条件满足时,通知等待的线程重新执行。线程阻塞避免了循环等待带来的CPU消耗问题。

并发



Copyright 2019-2020 YANLIANG'S BLOG 载入天数...载入时分秒...