sleep synchronized wait notify notifyAll

本文详细解析了Java中Thread类的静态方法sleep与Object类的wait方法的区别及使用场景。sleep方法使当前线程暂停指定时间,而wait方法则需要在线程获取对象锁的情况下调用,并释放锁,允许其他线程进入同步代码块。

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

sleep 和 wait 方法都是可以让线程停一停的方法

sleep 是 Thread 的静态方法 , wait是Object的方法

由于sleep 是Thread的静态方法, sleep是让当前线程停一停。

调用对象的wait方法时, 当前线程必须已经拥有该对象的monitor (monitor 在很多资料的文档里面翻译很看不懂, Java编程思想将其翻译为对象锁)。 表现在代码上就是:

synchronized (obj) {
    while ()
        obj.wait(timeout);
    ... // Perform action appropriate to condition
}

也就是说, wait方法调用的地方必须被同步块包围, 同步块的参数正是调用wait方法的对象。

wait方法被调用后, 当前线程也就暂停了下来, 同时, 该对象的所有同步锁被释放。针对这一句我的理解是, 假设有两个同步块

A)

synchronized (obj) {
    ... // Do some thing
}

B)

synchronized (obj) {
    ... // Do some thing
}

 

当前线程进入到同步块A时, 其它线程是不能进到同步块B的。 但是, 如果同步块里面包含有一句

obj.wait();

那么, 当前线程进入到同步块A并且执行到obj.wait();这一句时, 其它线程可以进到同步块B。

synchronized (obj) {

obj.wait();
    ... // Do some thing //当执行到这一句时, 实际上同步块的意义就不大了?
}

 

obj.notify方法会让唤醒其中一个wait的线程继续工作, 而obj.notifyAll方法会唤醒所有在obj上wait的线程继续工作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值