java线程唤醒与等待_Java线程的等待与唤醒

生产者和消费者必须使用同步代码块包裹起来,保证等待和唤醒只能有一个执行,同步使用的锁对象必须保证唯一

Thread中重要方法

void wait() 在其他线程调用此对象的notify()方法或notifyall()方法前,导致当前线程等待

void notify() 唤醒在此对象监视器上等待的单个线程后,会继续执行wait方法之后的代码

void notifyAll() 唤醒所有等待线程

void wait(long m)在毫秒结束之后,还没有被notify唤醒,就会自动醒来,线程睡醒进入到Runnable/blocke状态

void sleep(long m)在毫秒结束之后,线程睡醒进入到Runnable/blocke状态

使用

我们自己创建线程类的子类时,不要忘了写上继承extend。再run()方法中写入线程同步的代码,在客户端调用时,直接调用start方法,默认自动调用run方法的代码。

实例

产品类

public class Product {

//属性代表该产品是否还有

boolean flag=false;

}

//生产者类

public class Producer extends Thread{

private Product pr;

//构造有参构造函数,让产品类实例的对象作为锁对象

public Producer(Product pr){

this.pr=pr;

}

@Override

public void run() {

//一直生产该商品

while (true){

//使用锁对象

synchronized (pr){

//如果该产品还存在,

if(pr.flag==true){

try {

//生产者停止生产

pr.wait();

} catch (InterruptedException e) {

e.printStackTrace();

}

}

//否则生产者开始生产

System.out.println("生产者正在生产");

try {

//生产时间为5秒

Thread.sleep(5000);

System.out.println("请等待5秒");

} catch (InterruptedException e) {

e.printStackTrace();

}

//生产完成

pr.flag=true;

//唤醒消费者

pr.notify();

System.out.println("生产者生产完了,消费之开始使用");

}

}

}

}

//消费者类

public class Consumer extends Thread{

private Product pr;

//郑州人流医院 http://mobile.zzzzyy120.com/

public Consumer(Product pr){

this.pr=pr;

}

@Override

public void run() {

//消费者一直消费产品

while (true){

//锁对象

synchronized (pr){

//如果产品没有了

if (pr.flag==false){

try {

//则消费者进行等待

pr.wait();

} catch (InterruptedException e) {

e.printStackTrace();

}

}

//如果产品还有,消费者使用产品

System.out.println("消费者正在使用");

//消耗完产品,改变产品属性

pr.flag=false;

//唤醒生产者,等待再次生产产品

pr.notify();

System.out.println("产品已经使用完了,生产者开始生产");

}

}

}

}

//主函数

public static void main(String[] args) {

//实例化产品

Product pr=new Product();

//实例化生产者,并运行run方法

new Producer(pr).start();

//实例化消费者,并运行run方法

new Consumer(pr).start();

}

运行结果

995f676e77291d6dae7d4c5a6fcd37d8.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/504658.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【学习笔记】数据链路层——信道划分访问控制(FDM、TDM、STDM、WDM、CDM CDMA)

PPT截自王道考研B站教程 一. 铺垫知识 ① 传输数据使用的两种链路 星型、总线型都是广播式结构。 星型更有容错率,总线型断一个则全断。 ② 介质访问控制 定义 采取一定措施,使得两对节点之间的通信不会发生互相干扰的情况。 分类 多路复用&…

【学习笔记】数据链路层——随机访问介质访问控制(ALOHA、CSMA、CSMA/CD、CSMA/CA),截断二进制指数规避算法

文章目录小前言一. ALOHA协议纯ALOHA协议时隙ALOHA协议ALOHA对比CSMA协议定义与分类① 1-坚持CSMA② 非坚持CSMA③ p-坚持CSMA总结CSMA/CD协议传播时延对载波监听的影响确定重传时机:截断二进制指数规避算法最小帧长问题CSMA/CA协议工作原理CSMA/CD 与 CSMA/CA的对比…

pca算法介绍及java实现_PCA算法原理及实现

众所周知,PCA(principal component analysis)是一种数据降维的方式,能够有效的将高维数据转换为低维数据,进而降低模型训练所需要的计算资源。以上是比较官方的说法,下面是人话(正常人讲的话)版。pca就是一种能够有效压缩数据的方…

【学习笔记】数据链路层——轮询访问介质控制(轮询协议、令牌传递协议)

文章目录一. 轮询访问介质控制二. 轮询协议三. 令牌传递协议结束语PPT截自王道考研B站教程 一. 轮询访问介质控制 结合了前面的信道划分访问控制、随机访问MAC协议的优点: 既要不产生冲突,又要发送时占全部带宽。 二. 轮询协议 轮询开销:…

【学习笔记】局域网基本概念和体系结构,以太网、无线局域网与PPP协议、HDLC协议

文章目录一. 局域网:特点与要素① 拓扑结构② 传输介质③ 介质访问控制方法④ 局域网的分类⑤ IEEE 802标准⑥ MAC子层和LLC子层二. 以太网① 概述② 提供无连接、不可靠的服务③ 传输介质与拓扑结构的发展④ 10BAST-T以太网⑤ 适配器与MAC地址⑥ 以太网MAC帧⑦ 高速…

【学习笔记】数据链路层——链路层设备:物理层拓展以太网、链路层拓展以太网与冲突域和广播域

文章目录一. 冲突域与广播域① 定义与对比图② 例子二. 物理层扩展以太网三. 链路层扩展以太网① 网桥定义透明网桥源路由网桥② 以太网交换机PPT截自B站王道考研教程 本文内容导图 一. 冲突域与广播域 可以先只是简单看看定义,然后看完二、三后再回来看对比图和…

【学习笔记】网络层——概述、数据交换方式:电路交换、报文交换与分组交换(数据报与虚电路)

文章目录一. 概述二. 数据交换方式① 电路交换② 报文交换③ 分组交换④ 分组交换 && 报文交换举例对比⑤ 三种数据交换方式比较总结三. 分组交换的两种方式① 定义传输单元名词辨析② 数据报③ 虚电路④ 数据报与虚电路的对比ppt截自王道考研B站教程 太不容易了&#…

【学习记录】网络层——IP数据报(格式与分片)

文章目录一. IP数据报格式二. IP数据报分片① 为什么要分片?② 标识、标志与片偏移③ 例题单位为nB小结PPT截自王道考研教程 tips:b是位,B是字节。 一. IP数据报格式 在本章节中,暂时不区分IP数据报与分组。 生存时间(Time To Live)&#xf…

自动驾驶学习笔记(二十二)——自动泊车算法

#Apollo开发者# 学习课程的传送门如下,当您也准备学习自动驾驶时,可以和我一同前往: 《自动驾驶新人之旅》免费课程—> 传送门 《Apollo开放平台9.0专项技术公开课》免费报名—>传送门 文章目录 前言 感知算法 定位算法 规划算法…

【学习笔记】 IPv4地址、NAT与子网掩码、子网划分

文章目录一. IP地址① 在例子中理解③ IP地址的分类④ 特殊IP地址⑤ 私有IP地址⑥ 各类IP的对比二. NAT三. 子网划分与子网掩码① 子网划分② 子网掩码例题1例题2③ 使用子网时路由的转发PPT截自王道考研教程 一. IP地址 可以理解成上网设备的身份证号唯一点分十进制&#xff…

java对象底层原存储结构图解_图解图库JanusGraph系列-一文知晓“图数据“底层存储结构...

大家好,我是洋仔,JanusGraph图解系列文章,实时更新~图数据库文章总目录:转载文章请保留以下声明:一:存储模式留言或私信我,邀请你加入“图数据库交流”微信群!1、图内容本文以下所有…

【学习笔记】网络层——无分类编址CIDR、ARP协议、DHCP协议和ICMP协议

文章目录一. CIDR① 定义② 构成超网③ 最长前缀匹配二. ARP协议① 定义② 例题三. DHCP协议① 主机如何获取IP②DHCP协议四. ICMP协议① ICMP差错报告报文类型(5种)数据字段不发送的情况② ICMP询问报告报文类型应用一. CIDR ① 定义 在点分十进制后加…

【学习笔记】网络层——IPv6:地址表示、IPv4的对比、IPv4过渡到IPv6、基本地址类型等

文章目录一.1) 为什么要有IPv62)数据报格式3)IPv4和IPv6的区别4)IPv6地址表示形式5)IPv6基本地址类型6)IPv4到IPv6的过渡方法一. 1) 为什么要有IPv6 CIDR、NAT只是缓解IPv4空间殆尽,治标不治本。 而IPv6可…

【学习笔记】网络层——网络层设备、移动IP、IP组播

文章目录一. 网络层设备1)三层设备的区别2)路由表与路由转发二. 移动IP① 定义相关术语:实际过程:三. IP组播① IP数据报的三种传输方式② IP组播地址③ IGMP协议与组播路由选择协议网际组管理协议IGMP组播路由选择协议一. 网络层…

larval+mysql+不等于_MySQL学习日记(19)比较运算符

比较运算符比较对象 比较运算符 子查询mysql> SELECT * FROM 运算符例子;----------| id | 数值 |----------| 1 | 1 || 2 | 3 || 3 | 5 || 4 | 7 || 5 | 9 || 6 | 11 || 7 | 13 |----------7 rows in set (0.01 sec)mysql> SELECT * FROM 运算符例子2;----------| id | …

【学习笔记】路由算法与路由协议:RIP协议与距离向量算法、OSPF协议与链路状态算法、BGP协议

文章目录一. 路由算法与路由协议概述① 路由算法的分类② 分层次的路由选择协议二. RIP协议和距离向量算法① RIP协议定义② RIP协议:交换对象、交换周期、交换内容③ 距离向量算法例题1例题2④ RIP协议的报文格式⑤ RIP协议:好消息传得快,坏…

【学习笔记】传输层:概述、UDP协议

文章目录一. 概述1)传输层的寻址与接口二. UDP协议1)定义2)首部格式3)UDP检验一. 概述 是主机才有的层次 两个协议:TCP & UDPTCP面向连接,UDP则不是QQ发一条信息(UDP);发一个大文件(TCP&am…

【学习笔记】传输层:TCP协议(报文段、连接管理{握手}、可靠传输、流量控制、拥塞控制)

文章目录一. 协议特点 & 报文段① 特点② 报文段首部格式二. TCP连接管理① 建立联系(三次握手)SYN洪泛攻击② 连接释放(四次挥手)三. TCP流量控制① 序号② 重传冗余ACK(快速重传)三. 流量控制① 定义…

空调调节 java_空调调节方式

只能手动对冷/热风的温度和风量进行粗略的分级调节,不能设定车内空调的具体温度。拨动控制板上的功能键对温度、风速、风向进行控制。手动空调的优点在操作简单明了,方便,几乎任何事情都在弹指间完成操作。对于风速和风向的调节随心所欲。自动…

【学习笔记】网络层:应用模型、DNS系统、文件传输协议FTP

文章目录一. 应用层概述① 客户/服务器(C/S)模型② P2P模型(对等模型)二. DNS系统① 定义② 域名③ 域名服务器④ 域名解析过程三. 文件传输协议FTP① 定义② FTP服务器和用户端③ FTP工作原理附加:两种FTP传输模式一. 应用层概述 应用层&am…