并发学习07--多线程wait/notify

博客介绍了Java中WaitSet和EntryList的区别,阐述了obj.wait()、obj.notify()等方法的作用,如obj.wait()让获得锁的线程去WaitSet等待。还对比了sleep和wait的异同,包括是否释放锁、使用条件等,最后提及wait和notify的正确使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

WaitSet和EntryList是不同的。

obj.wait(): 让获得锁的线程(Owner)去WaitSet等待.

obj.wait(long time):让获得锁的线程(Owner)去WaitSet等待time ms,如果等待期间没有被唤醒,时间结束后自动唤醒,获得cpu时间片后再去运行后面的code。如果等待期间被唤醒,停止等待,运行后面的codes.

obj.wait(long time, int nanos): 第一个参数是ms,第二个参数是纳秒

obj.notify():在WaitSet中随即唤醒一个线程到EntryList里

obj.notifyAll(): 唤醒WaitSet中的所有线程到EntryList里

必须获得此对象的锁成为Owner后,才能调用这些方法;

sleep和wait异同:

        1.同为等待,且进入WaitSet里面

        2.sleep等待时不会释放锁,wait等待会释放锁。

        3.sleep在线程任意处可用,wait必须拿到锁(与synchronized一起使用)后才能使用。

        4.sleep是Thread的静态方法,wait是对象的方法。

wait和notify的正确使用

synchronized(lock){
    while(条件不满足) { lock.wait(); }
    //干活;
}

//另一个线程
synchronized(lock) {
   lock.notifyAll();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值