java——wait和notify的基本用法

1.简单了解一下wait

wait、sleep:用于线程休眠

wait是Object方法:
有参数时:wait(500)表示Time_waiting状态
无参数:wait()或wait(0)都表示无限等待:waiting状态

Sleep是Thread的静态方法:
Sleep(500)表示Time_waiting状态
Sleep(0)表示当前线程重新触发一次CPU竞争
不存在无参的情况:会报错
在这里插入图片描述

wait所做的事情:
1.使当前的线程进行等待
2.释放当前的锁;
3.被唤醒时,重新尝试获取这个锁

wait结束等待的条件 :
1.其他线程(也可以不是线程)调用了该对象的notify或notifyAll方法
2.其他线程(也可以不是线程)调用该等待线程的interrupted方法
3.等待时间超时:wait(有参)
注意:wait(0)表示的是无限等待

2.wait的用法:

1.必须配合synchronized使用
2.且使用的必须为同一个对象:synchronized (A)配合A.wait()使用
3.当线程执行到object.wait()时,此线程会同时释放锁synchronized (object);当它结束了wait后,此线程又会重新去争抢锁synchronized (object)。

public class Wait {
   
    public static void main(String[] args) throws InterruptedException {
   
        Object object=new Object();
        Thread thread=new Thread(()->{
   
            synchronized (object){
   
                try {
   
                    object.wait();
                } catch (InterruptedException e) {
   
                    e.printStackTrace();
                }
                System.out.println("执行完成");
            }
        });
        thread.start();
     }
}

执行结果:
当前程序中不存在满足wait结束等待的条件,所以永远不会输出“执行完成”

3.wait结束等待:

1.使用notify:
必须配合synchronized使用;
且在notify后,当前线程不会马上释放锁,要等到当前线程被synchronized修饰的代码执行完,才会释放锁;
使用notify的对象为A,则只能唤醒A.wait()的线程,不能唤醒B.wait()的线程;
****小区别:
notify()方法——随机唤醒一个wait的线程
notifyAll()方法——唤醒所有wait的线程,让这些被唤醒的线程去争抢,按争

  • 21
    点赞
  • 62
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值