1.如果线程调用了对象的wait方法,那么线程便会处于该对象的等待池中,等待池中的线程不会去竞争该对象的锁;
2.当有线程调用了notifyAll方法(唤醒所有wait线程)或notify方法(只随机唤醒一个wait线程),被唤醒的线程便会进入该对象的锁池中,所持中的线程回去竞争该对象锁,也就是说,调用了notify后只要一个线程会由等待池进入锁池,而notifyAll会将该对象等待池内的所有线程移动到锁池中,等待锁竞争;
3.所谓唤醒线程,就是将线程由等待池移动锁池,notifyAll调用后,会将全部线程由等待池移动到锁池,然后参与锁池竞争,竞争成功则继续执行,如果不成功则留在锁池等待锁被释放后再次参与竞争。notify只会唤醒一个线程。
notify和notifyAll区别
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 前言 今天简单的讲一讲线程中sleep(),join(),yield(),wait(),notify(),noti...
- 在了解这两个方法之前,先了解两个概念锁池(EntryList)和等待池(WaitSet) 锁池 假设线程A已经拥有...
- 根据以上关于锁池和等待池的概念描述我们可以知道 1.如果有多个线程想要某个已经被占用的锁的时候,因为想要获取锁,就...
- [toc] 还记得前面用ArrayList实现阻塞队列的文章:《什么?面试官让我用ArrayList实现一个阻塞队...