Java notify唤醒源代码的示例分析
发表于:2024-10-23 作者:千家信息网编辑
千家信息网最后更新 2024年10月23日,这期内容当中小编将会给大家带来有关Java notify唤醒源代码的示例分析,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Java notify唤醒在此对象监视器上
千家信息网最后更新 2024年10月23日Java notify唤醒源代码的示例分析
这期内容当中小编将会给大家带来有关Java notify唤醒源代码的示例分析,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
Java notify唤醒在此对象监视器上等待的单个线程。相关的问题需要我们不断的学习,下面我们就看看如何才能更好的使用。如果所有线程都在此对象上等待,则会选择唤醒其中一个线程。
直到当前的线程放弃此对象上的锁定,才能继续执行被唤醒的线程。此方法只应由作为此对象监视器的所有者的线程来调用.
"当前的线程必须拥有此对象监视器"与"此方法只应由作为此对象监视器的所有者的线程来调用"说明wait方法与notify方法必须在同步块内执行,即synchronized(obj之内).
调用对像wait方法后,当前线程释放对像锁,进入等待状态.直到其他线程(也只能是其他线程)通过Java notify唤醒方法,或 notifyAll.该线程重新获得对像锁.
继续执行,记得线程必须重新获得对像锁才能继续执行.因为synchronized代码块内没有锁是寸步不能走的.看一个很经典的例子:
Java notify唤醒代码
package ProductAndConsume; import java.util.List; public class Consume implements Runnable{ private List container = null; private int count; public Consume(List lst){ this.container = lst; } public void run() { while(true){ synchronized (container) { if(container.size()== 0){ try { container.wait();//放弃锁 } catch (InterruptedException e) { e.printStackTrace(); } } try { Thread.sleep(100); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } container.remove(0); container.notify(); System.out.println("我吃了"+(++count)+"个"); } } } } package ProductAndConsume; import java.util.List; public class Product implements Runnable { private List container = null; private int count; public Product(List lst) { this.container = lst; } public void run() { while (true) { synchronized (container) { if (container.size() > MultiThread.MAX) { try { container.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } container.add(new Object()); container.notify(); System.out.println("我生产了"+(++count)+"个"); } } } } package ProductAndConsume; import java.util.ArrayList; import java.util.List; public class MultiThread { private List container = new ArrayList(); public final static int MAX = 5; public static void main(String args[]){ MultiThread m = new MultiThread(); new Thread(new Consume(m.getContainer())).start(); new Thread(new Product(m.getContainer())).start(); new Thread(new Consume(m.getContainer())).start(); new Thread(new Product(m.getContainer())).start(); } public List getContainer() { return container; } public void setContainer(List container) { this.container = container; }
上述就是小编为大家分享的Java notify唤醒源代码的示例分析了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注行业资讯频道。
线程
对象
分析
方法
监视器
监视
源代码
示例
代码
内容
所有者
此方法
不断
专业
中小
例子
内容丰富
单个
寸步
就是
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
天翼云服务器网络安全
网络安全发 第三十六条
网络安全报纸形式
有关军事网络安全的
绑定数据库 可搜索下拉框
网络安全共享中心打不开
梦幻西游门派闯关服务器排名2021
无为wifi服务器
网吧服务器就是电脑主机吗
零极网络技术是做什么
乡村振兴与网络技术
xboxone怎么更改服务器
互联网网络安全工程技巧
信息工程网络技术有编程吗
优秀的开源文件服务器
镇江手机软件开发定做价格
北京先进数通网络技术
数据库查询以什么开头的
服务器2019下载
加密狗和服务器哪个安全
mc服务器隐身
淄川办公自动化软件开发公司
数字货币对网络安全的
网络安全设备租赁合同
关机网络安全
阿里分析型数据库
服务器宕机域名解析器失效
00数据库技术功能
数据库查询以什么开头的
移动机器人软件开发