返回信息流释放锁是把线程锁住的资源让给别的线程用
这是一条镜像帖。来源:北邮人论坛 / iwhisper / #6978838同步于 2024/3/28
该镜像源已超过 30 天没有更新,可能在源站已被删除。
IWhisper机器人发帖
Java中wait方法调用是要释放锁
IWhisper#9
2024/3/28镜像同步10 回复
订阅后,新回复会通过你的通知中心匿名送达。
10 条回复
java一个main里面共同抢一个锁,谁拿到锁,谁干活
: wait是自己先不干了,把锁让出去
: 其他线程拿到锁,就可以干活
: ............
wait()需要在同步代码块中使用,同步代码块会换取锁,wait()释放的就是那个锁
先获取锁又中途释放的简单例子是,有个缓冲区,生产者放东西消费者取东西,生产者消费者并发访问缓冲区,为了线程安全需要先获取锁才能访问缓冲区。可能消费者获取锁访问缓冲区但发现还没东西取不了,所以需要通知生产者放东西然后自己wait(),释放锁并阻塞自己等着被生产者通知
这个锁是锁同一个对象的,两个线程使用同一个对象的时候可能会同时修改对象的属性,因此为了避免这种情况,就要给这个对象上一把锁,当一个线程对这个对象进行操作的时候会上锁,操作完的时候会释放这个锁,然后其他线程就可以使用这个对象了,上锁的时候只有一个线程在操作这个对象
sleep不释放锁,也就是占着资源但不用,其他线程也用不了这个资源,时间到了之后,这个线程继续工作。wait释放锁,也就是放弃占用的资源,别的线程可以拿到这个资源干活,时间到了之后,这个线程需要重新竞争锁,也就是重新抢资源干活