生产者、消费者问题之闹钟
需求:写一个闹钟程序,闹钟每隔2秒响一次,每次响5声,闹钟响铃后1秒,人将闹钟关闭.
public class People implements Runnable {
private String name;
private Clock c;
public People(String name, Clock c) {
this.name = name;
this.c = c;
}
public void run() {
weakup();
}
public void weakup() {
//睡觉的人时刻等待闹铃响
while(true) {
synchronized(c) {
if(c.isRing()) {
c.setRing(false);
System.out.println("就起来了就起来");
try {
Thread.sleep(1000);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
c.notify();
try {
c.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}else {
c.setRing(true);
c.notify();
try {
c.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Clock1 getC() {
return c;
}
public void setC(Clock1 c) {
this.c = c;
}
}
public class Clock implements Runnable {
private boolean isRing; //判断闹铃是否响过
public void run() {
ring();
}
public void ring() {
//闹铃响5次,每次响3声
for(int i = 0; i < 5; i++) {
synchronized(this) {
if(!isRing) {
isRing = true;
for(int j = 0; j < 3; j++) {
System.out.println("叮叮叮...");
}
try {
Thread.sleep(2000);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
this.notify();
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}else {
try {
isRing = false;
this.notify();
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public boolean isRing() {
return isRing;
}
public void setRing(boolean isRing) {
this.isRing = isRing;
}
}
public class TestClockPeople {
public static void main(String [] args) {
Clock c = new Clock1();
People p = new People("大姚", c);
Thread ct = new Thread(c);
Thread pt = new Thread(p);
pt.setDaemon(true); //将人设置为守护线程
ct.start();
pt.start();
}
}
转载于:https://www.cnblogs.com/helloworldlx/p/8550356.html
生产者、消费者问题之闹钟相关推荐
- RabbitMQ 入门系列(3)— 生产者消费者 Python 代码实现
生产者消费者代码示例 上一章节中对消息通信概念做了详细的说明,本章节我们对 RabbitMQ 生产者和消费者代码分别做一示例说明. 1. 生产者代码 #!/usr/bin/env python # c ...
- 【C++】多线程(链式、循环队列)实现生产者消费者模式
生产者消费者模式: 生产者消费者问题(英语:Producer-consumer problem),也称有限缓冲问题(英语:Bounded-buffer problem),是一个多线程同 ...
- 面试官让我手写一个生产者消费者模式?
不知道你是否遇到过面试官让你手写生产者消费者代码.别说,前段时间有小伙伴还真的遇到了这种情况,当时是一脸懵逼. 但是,俗话说,从哪里跌倒就要从哪里爬起来.既然这次被问到了,那就回去好好研究一下,争取下 ...
- windows进程生产者消费者代码c语言,生产者消费者问题---C语言实现
生产者消费者问题(Producer-consumer problem) 是一个多线程同步问题的经典案例. 生产者的主要作用是生成一定量的数据放到缓冲区中,然后重复此过程.与此同时,消费者也在缓冲区消耗 ...
- 基于队列的生产消费设计java_生产者-消费者设计模式
一.生产者消费者设计模式 1.中间队列 一段内存空间,且可存取: 2.两种角色 (1)生产者:生产数据: (2)消费者:消费数据. 3.三种关系 (1)生产者与生产者的互斥关系: (2)消费者与消费者 ...
- 用三个线程实现生产者消费者模型,其中一个线程作为生产者,二个线程作为消费者,生产者随机生产一个时间戳或者字符串,消费者消费这个时间戳,并不能重复消费,并将其打印出来
题目要求: 用三个线程实现生产者消费者模型,其中一个线程作为生产者,二个线程作为消费者,生产者随机生产一个时间戳或者字符串,消费者消费这个时间戳,并不能重复消费,并将其打印出来.(这是一道百度面试的算 ...
- 生产者/消费者模型详解(基于Java)
title: 生产者消费者模型 tags: 多线程 synchronized 锁 wait() notify() 生产者/消费者模型原理以及代码实现 一.生产者/消费者模型原理 所谓的生产者消费者模型 ...
- java线程模拟生产者消费者问题
所谓的生产者消费者问题,就是存在生产者和消费者两个线程,当仓库还没满的时候,生产者可以生产,当仓库没空的时候,消费者可以取走商品. 我们用实例说话: 下面,我们创建几个类: 1.消费者--主要负责消费 ...
- 图文并茂的生产者消费者应用实例demo
前面的几篇文章<<.NET 中的阻塞队列BlockingCollection的正确打开方式>><<项目开发中应用如何并发处理的一二事>>从代码以及理论角 ...
- linux使用线程实现生产者消费者问题,Linux平台下线程同步,实现“生产者消费者问题”...
(1)线程同步,实现"生产者消费者问题" 要求:缓冲区大小为20,生产者每次放一个产品,消费者每次取走一个产品:生产者和消费者至少2个. (2)代码如下: #include #in ...
最新文章
- MQTT的学习研究(五) MQTT moquette 的 Blocking API 发布消息服务端使用
- 博士毕业后,去哪儿?
- css元素捕捉,css元素选择器
- HDU 5306 Gorgeous Sequence
- 今天抽点时间来说一个C#里的关键字及它们的原型
- php 将date转换成string,php如何实现date转string
- 独立成分分析ICA系列5:信息极大化的 ICA 算法
- javascript和var之间的区别?
- linux怎么抓sip包,Ubuntu下使用Wireshark进行抓包分析(含SIP和RTP包)
- Spring Boot2 整合 MyBatis 多数据源
- PDF 补丁丁 0.4.1.688 测试版发布(请务必用其替换 682 测试版)
- python爬虫抖音音浪_【Python爬虫】抖音去水印
- idea没有错误提示的解决方法(一直处于错误分析中)
- 解决Excel文件读取遇到值为null单元格会自动跳过的情况
- python学习第25天
- 《构建之法》 第5.5 第6 第7章
- 【Neo4j】第 1 章:图数据库
- 如何查看服务器资源占用情况,云服务器如何查看内存占用情况
- “九把锁”还是春秋时期的黄金密道
- 浅析C#UDP传输大文件