简介

RT

code

package com.kuang;

/**
* Created by lee on 2021/3/30.
*/
public class TestPC2 {
public static void main(String[] args) {
TV tv = new TV();
new Player(tv).start();
new Watcher(tv).start();
}
} // 生产者-->演员
class Player extends Thread {
TV tv;
public Player(TV tv) {
this.tv = tv;
} @Override
public void run() {
for (int i = 0; i < 20; i++) {
if(i%2 == 0) {
this.tv.play("快乐大本营");
}else {
this.tv.play("抖音");
}
}
}
}
// 消费者-->观众
class Watcher extends Thread{
TV tv;
public Watcher(TV tv) {
this.tv = tv;
}
@Override
public void run() {
for (int i = 0; i < 20; i++) {
if(i%2 == 0) {
this.tv.watch();
}else {
this.tv.watch();
}
}
}
} class TV {
String voice; // 表演的节目
boolean flag = true; // 表演
public synchronized void play(String voice) { if(!flag) {
try {this.wait();}
catch (InterruptedException e){
e.printStackTrace();
}
}
System.out.println("演员表演了:" + voice); // 通知观众观看
this.notifyAll();
this.voice = voice;
this.flag = !this.flag;
} // 观看
public synchronized void watch() {
if(flag) {
try {
this.wait();
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("观看了:" + voice);
// 通知演员表演
this.notifyAll();
this.flag = !this.flag;
}
} // 产品--》

java 生产者消费者模式 使用标志位进行判断的更多相关文章

  1. 基于Java 生产者消费者模式(详细分析)

    Java 生产者消费者模式详细分析 本文目录:1.等待.唤醒机制的原理2.Lock和Condition3.单生产者单消费者模式4.使用Lock和Condition实现单生产单消费模式5.多生产多消费模 ...

  2. Java 生产者消费者模式详细分析

    */ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...

  3. Java生产者消费者模式

    为什么要使用生产者和消费者模式 在线程世界里,生产者就是生产数据的线程,消费者就是消费数据的线程.在多线程开发当中,如果生产者处理速度很快,而消费者处理速度很慢,那么生产者就必须等待消费者处理完,才能 ...

  4. java生产者/消费者模式实现——一生产者一消费者(操作值)

    胶多不粘话多不甜,直接上代码: 生产者类: /** * Created by 51304 on 2016/2/28. */ public class P { private String lock; ...

  5. 【多线程】java多线程实现生产者消费者模式

    思考问题: 1.为什么用wait()+notify()实现生产者消费者模式? wait()方法可以暂停线程,并释放对象锁 notify()方法可以唤醒需要该对象锁的其他线程,并在执行完后续步骤,到了s ...

  6. Java设计模式—生产者消费者模式(阻塞队列实现)

    生产者消费者模式是并发.多线程编程中经典的设计模式,生产者和消费者通过分离的执行工作解耦,简化了开发模式,生产者和消费者可以以不同的速度生产和消费数据.这篇文章我们来看看什么是生产者消费者模式,这个问 ...

  7. java+反射+多线程+生产者消费者模式+读取xml(SAX)入数据库mysql-【费元星Q9715234】

    java+反射+多线程+生产者消费者模式+读取xml(SAX)入数据库mysql-[费元星Q9715234] 说明如下,不懂的问题直接我[费元星Q9715234] 1.反射的意义在于不将xml tag ...

  8. java ReentrantLock结合条件队列 实现生产者-消费者模式 以及ReentratLock和Synchronized对比

    package reentrantlock; import java.util.ArrayList; public class ProviderAndConsumerTest { static Pro ...

  9. Java 学习笔记 使用并发包ReentrantLock简化生产者消费者模式代码

    说明 ReentrantLock是java官方的一个线程锁类,ReentarntLock实现了Lock的接口 我们只需要使用这个,就可以不用使用synchronized同步关键字以及对应的notify ...

  10. Java多线程-----实现生产者消费者模式的几种方式

       1 生产者消费者模式概述 生产者消费者模式就是通过一个容器来解决生产者和消费者的强耦合问题.生产者和消费者彼此之间不直接通讯,而通过阻塞队列来进行通讯,所以生产者生产完数据之后不用等待消费者处理 ...

随机推荐

  1. 🎀SQL注入拦截工具-动态order by

    简介 业务场景经常会存在动态order by 入参情况,在处理动态 order by 参数时,需要防止SQL注入攻击.SQL注入是一种常见的安全漏洞,攻击者可以通过这种手段操纵查询来执行恶意代码. 措 ...

  2. python实例:导入会员数据后,读取数据文件,检查导入正确性(整列取excel值、合并列、response取值)

    场景描述:某系统新上线,老系统的会员数据要导入新系统中,包含手机号,上级信息和会员余额.有1万多条数据,手工对比过于繁琐,用python自动化处理 思路:系统导入数据后,脚本读取文件,先把会员数据取出 ...

  3. 探秘Transformer系列之(31)--- Medusa

    探秘Transformer系列之(31)--- Medusa 目录 探秘Transformer系列之(31)--- Medusa 0x00 概述 0x01 原理 1.1 动机 1.2 借鉴 1.3 思 ...

  4. K8s新手系列之K8s架构

    应用部署方式演变 在部署应用程序的方式上,主要经历了三个时代: 传统部署 互联网早期,会直接将应用程序部署在物理机上 优点:简单,不需要其它技术的参与缺点:不能为应用程序定义资源使用边界,很难合理地分 ...

  5. 【HUST】网安|编译原理实验|实验四攻略

    [实验代码及报告地址:Gitee传送门](已关闭传送大门,原因是抄袭过多,如需参考,请直接看博客,虽然下一届内容会变了) 不擅长写报告昂,很多地方能省全省了. 助力来年编译原理加大难度!(hhh) M ...

  6. 探索 Rust:从基础语法到实用概念

    @charset "UTF-8"; .markdown-body { line-height: 1.75; font-weight: 400; font-size: 15px; o ...

  7. IPO——LeetCode⑫

    //原题链接https://leetcode.com/problems/ipo/ 题目描述 Suppose LeetCode will start its IPO soon. In order to ...

  8. 设置IntelliJ IDEA 2021字体大小

      安装Mac版 IntelliJ IDEA 2021.3.1 (Ultimate Edition)后,就需要更改字体.IntelliJ IDEA的字体设置分为两部分:一部分是UI的字体和字号设置,另 ...

  9. MyBatis常见面试题:通常一个Xml映射文件,都会写一个Dao接口与之对应,请问,这个Dao接口的工作原理是什么?Dao接口里的方法,参数不同时,方法能重载吗?

      MyBatis常见面试题:通常一个Xml映射文件,都会写一个Dao接口与之对应,请问,这个Dao接口的工作原理是什么?Dao接口里的方法,参数不同时,方法能重载吗?   Dao接口即Mapper接 ...

  10. cmake 简易教程

    CMake 是一个跨平台的.开源的构建工具.cmake 是 makefile 的上层工具,它们的目的正是为了产生可移植的makefile,并简化自己动手写makefile时的巨大工作量,目前很多开源的 ...