如何通过一个例子来描述线程wait和notify
发表于:2025-01-31 作者:千家信息网编辑
千家信息网最后更新 2025年01月31日,这期内容当中小编将会给大家带来有关如何通过一个例子来描述线程wait和notify,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。场景:一个类中,一个是往容器中添加元
千家信息网最后更新 2025年01月31日如何通过一个例子来描述线程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安全错误
数据库的锁怎样保障安全
胜利金融软件开发有限公司
国产服务器大事件
怎么看rust服务器的真实人数
尚学堂数据库查找
塔科夫游戏服务器地区
微信的聊天记录存入自己的数据库
提高网络安全性优化的方法
h2是内存数据库吗
mysql最多建数据库
网络服务器需要算工程量吗
新都网络技术专业
蹭别人网怎么确定网络安全
.net调用远程数据库
数据库设计为什么要指标库
重庆市网络安全ctf竞赛
服务器磁盘转换
金华学软件开发费用
如何查看数据库的代码
个人健康数据库
软件开发掉头发
数据库领域是啥专业
学生成绩mdb数据库
幼儿园网络安全宣传语
站在乌克兰网络安全悬柜等于几
长春网络安全教育
方舟生存进化收藏的服务器不见
轻量化的数据库
枪神对决怎么开服务器
服务器装哪个浏览器
数据库安装实例功能