有趣生活

当前位置:首页>科技>多线程notify唤醒的是哪个对象理解并发编程中的锁池

多线程notify唤醒的是哪个对象理解并发编程中的锁池

发布时间:2026-07-21阅读(1)

导读本文为小编原创文章,首发于Java识堂,一个高原创,高收藏,有干货的微信公众号,一起成长,一起进步,欢迎关注介绍锁池EntryList等待池WaitSet锁....

本文为小编原创文章,首发于Java识堂,一个高原创,高收藏,有干货的微信公众号,一起成长,一起进步,欢迎关注

介绍

锁池EntryList

等待池WaitSet

锁池

假设线程A已经拥有了某个对象(不是类)的锁,而其他线程B,C想要调用这个对象的某个synchronized方法(或者块),由于B,C线程在进入对象的synchronized方法(或者块)之前就必须先获得该对象锁的拥有权,而恰巧该对象的锁目前正被线程A所占用,此时B,C线程就会被阻塞,进入一个地方去等待锁的释放,这个地方便是该对象的锁池

等待池

假设线程A调用了某个对象的wait()方法,线程A就会释放该对象的锁,同时线程A就进入到了该对象的等待池中,进入到等待池中的线程不会去竞争改对象的锁

notifyAll会让所有处于等待池的线程全部进入锁池去竞争获取锁的机会

notify只会随机选取一个处于等待池中的线程进入锁池去竞争获取锁的机会

例子

我们用例子演示说明

开3个等待的线程,一个通知的线程,通知的线程里面调用notify方法

看到只有一个线程结束了,其余2个线程一直阻塞。

thread2 waitthread3 waitthread1 waitthread2 notify

将notifyTask中的notify换成notifyAll,输入如下,可以看到3个线程都正常结束

thread1 waitthread2 waitthread3 waitthread3 notifythread2 notifythread1 notify

推荐阅读:

IDEA自动生成测试类,提升一半工作效率

年后面试必会基础,如何控制多线程执行顺序?

大家的理解是怎样的呢?欢迎交流探讨

TAGS标签:  线程  notify  醒的  哪个  对象  多线程notify唤

Copyright © 2024 有趣生活 All Rights Reserve吉ICP备19000289号-5 TXT地图HTML地图XML地图