自学内容网 自学内容网

JUC(二)

1、wait notify

  1. Owner 线程发现条件不满足,调用 wait 方法,即可进入 WaitSet 变为 WAITING

  2. 状态 BLOCKED 和 WAITING 的线程都处于阻塞状态,不占用 CPU 时间片

  3. BLOCKED 线程会在 Owner 线程释放锁时唤醒

  4. WAITING 线程会在 Owner 线程调用 notify 或 notifyAll 时唤醒,但唤醒后并不意味者立刻获得锁,仍需进入 EntryList 重新竞争

api:

  1. obj.wait() 让进入 object 监视器的线程到 waitSet 等待 (带参数的表示等待的时间,时间过到了就不等待直接清醒)

  2. obj.notify() 在 object 上正在 waitSet 等待的线程中挑一个唤醒

  3. obj.notifyAll() 让 object 上正在 waitSet 等待的线程全部唤醒

        它们都是线程之间进行协作的手段,都属于 Object 对象的方法。必须获得此对象的锁,才能调用这几个方法

1.1、wait和sleep的区别

sleepwait
属于线程中的方法是Object的方法
不需要和synchronized配合使用需要和synchronized一起使用
在睡眠的同时不会释放锁对象等待的时候会释放锁对象

原文地址:https://blog.csdn.net/keleID/article/details/136995706

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!