如何通过一个例子来描述线程wait和notify
发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,这期内容当中小编将会给大家带来有关如何通过一个例子来描述线程wait和notify,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。场景:一个类中,一个是往容器中添加元
千家信息网最后更新 2025年12月02日如何通过一个例子来描述线程wait和notify
这期内容当中小编将会给大家带来有关如何通过一个例子来描述线程wait和notify,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
场景:一个类中,一个是往容器中添加元素的方法,一个是返回容器大小的方法,现在又两个线程,A线程调用添加方法,B线程调用返回容器大小方法,当大小为5的时候,B线程提示并结束。
代码可直接复制,运行:
public class UseWaitAndNotify { volatile List list = new ArrayList();//这里为什么使用volatile,请看:https://my.oschina.net/u/4049911/blog/3121294 public void add(Object o) { list.add(o); } public int size() { return list.size(); } public void useWaitAndNotify() { new Thread(new Runnable() { @Override public void run() { synchronized (this) { System.out.println("size方法开始"); /** * 这里必须得是不等于5,因为刚开始肯定不等于5,然后才会进这个方法,执行wait方法,这个线程就会在wait那等着。 * 然后cpu执行另一个方法,当另一个方法执行等于5是,使用notify唤醒等待的线程(等待同一个锁的线程)。 * 然后从wait方法开始往下执行,到结束。 */ if(list.size()!=5) { try { wait(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } System.out.println("size方法结束"); } } }).start(); synchronized (this) { System.out.println("add方法开始"); for(int i=0;i<10;i++) { /** *当加入元素==5时,当前线程就应该停止,让出cpu,让cpu去执行其他线程。 *那让线程让出cpu的方法有哪些呢: *wait让出线程,释放锁 *yield 让出cpu,但不会释放锁 *join 插入其他线程,线程同步作用,在被调用线程未结束前,当前线程将一直阻塞在join处 * *我们使用wait * */ list.add(new Object()); if(i==4) { /** * 这里为什么使用notify后,又使用wait呢,就是上面这个方法的意思,使用notify,当前线程是不会释放锁的,所以即使唤醒了其他 * 线程,其他线程拿不到锁,也执行不了。 * 也就是说如果下面不使用wait,当list等于5的时候,另一个线程拿不到锁,执行不了,只有当前线程释放锁,另一个线程才会拿到锁执行, * 也就是说当list的size等于10的时候,另一个线程才会停止 */ this.notify(); try { this.wait(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } System.out.println("add方法结束"); } } } @Test public void test() { //使用wait和notify实现 useWaitAndNotify(); } }因为wait和notify只能在锁中使用,所以需要加上synchronized锁
上述就是小编为大家分享的如何通过一个例子来描述线程wait和notify了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注行业资讯频道。
线程
方法
大小
容器
时候
例子
也就是
也就是说
元素
内容
就是
分析
专业
两个
中小
代码
作用
内容丰富
只有
场景
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
佛山神马互联网科技
美萍超市销售系统数据库
schema数据库实例
云南橙铭网络技术有限公司
北京智能家居软件开发公司
贵州服务器维护公司云主机
2021移动服务器集采
数据库不小心删了system
数据库查null字段
县级医院网络安全等级要求
网络安全管理保障
网络安全无线审计
软件开发详细设计lld
软件开发和芯片破解有有什么区别
怎么维护公司网络安全
儿童网络安全普及
软件技术属于计算机网络技术
网络安全风险动态
软件开发环境与工具教程
网易数据库db
vs的自带数据库怎么建表
香港互联网科技有限公司官网
数据库怎么查询表的内容总和
请与这台服务器管理员
惠科数据库
在云服务器上启动服务
软件开发月初计划
怎么设计数据库连接池
贵州华通网络技术有限公司
盛景网络技术开发有限公司