生产者消费者模式--java多线程同步方法的应用 痛定思痛。 2022-03-14 15:42 113阅读 0赞 生产者消费者模式是对java多线程的一个基础应用 我们一共设计了货物 生产者 消费者三个类 货物有商标和名称两个属性和对应的设置访问方法 生产者用于设置货物的属性 消费者用于访问并打印货物的属性 我们设置了一个生产者线程和两个消费者线程,其中生产者一次只能生产一批货物,由两个消费者争夺资源,代码如下 class Goods { private String brand; private String name; boolean flag;//为真即有商品,为假则没有 //空构造器 public Goods() { } //非空构造器 public Goods(String brand, String name) { super(); this.brand = brand; this.name = name; } //属性设置和获得方法 public String getBrand() { return brand; } public void setBrand(String brand) { this.brand = brand; } public String getName() { return name; } public void setName(String name) { this.name = name; } //synchronized修饰的生产方法 public synchronized void set(String brand,String name) { if(flag) { try { wait(); } catch (InterruptedException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } } this.brand=brand; try { Thread.sleep(400); } catch (InterruptedException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } this.name=name; System.out.println(Thread.currentThread().getName()+"生产者线程生产了-----" + getBrand() + getName()); flag = true; notifyAll(); } //synchronized修饰的消费方法 public synchronized void get() { while(!flag) { try { wait(); } catch (InterruptedException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } } System.out.println(Thread.currentThread().getName()+"消费了----" + getBrand() + getName()); flag=false; notify(); } } //生产者类,用于生产,即给货物Goods设定属性 public class Producter implements Runnable { private Goods g; public Producter(Goods g) { super(); this.g = g; } @Override public void run() { for (int i = 0; i < 30; i++) { if (i % 2 == 0) { g.set("哇哈哈"," 矿泉水"); } else { g.set("旺仔", "小馒头"); } } } } //消费者类,消费货物,即访问货物的属性 class Customer implements Runnable { private Goods g; public Customer(Goods g) { super(); this.g = g; } @Override public void run() { for (int i = 0; i < 30; i++) { g.get(); Thread.yield(); } } } public class 消费者生产者模式 { public static void main(String[] args) { //商品对象 Goods g=new Goods(); //生产者和消费者对象 Producter p = new Producter(g); Customer c1 = new Customer(g); //线程设置 Thread a = new Thread(c1,"消费者A"); Thread b = new Thread(c1,"消费者B"); Thread c = new Thread(p); a.start(); b.start(); c.start(); } }
相关 Java多线程实战:生产者消费者模型应用 `生产者消费者模型`是多线程编程中一个经典的场景,它包括两个主要角色:生产者(Producer)和消费者(Consumer)。 1. 生产者: - 主动创建产品(如消息 梦里梦外;/ 2024年09月19日 18:36/ 0 赞/ 2 阅读
相关 Java多线程08——生产者/消费者模式 ![e526072d744c32a40b2c0b8dd70e1ab4.png][] 1 概念介绍 多线程环境下,我们经常需要多个线程的并发和相互通信。其中,有一个重要的 刺骨的言语ヽ痛彻心扉/ 2024年03月26日 12:55/ 0 赞/ 37 阅读
相关 线程通信——多线程同步(生产者消费者例子) 文章目录 前言 一、线程通信概述 二、典型例子 1.生产者和消费者例子 2.通过例子理解与剖析 三、常用API 四 古城微笑少年丶/ 2022年11月02日 00:56/ 0 赞/ 134 阅读
相关 多线程编程:生产者消费者模式 1.Runnable wait notify实现 2.堵塞队列blockingQueue 3.lock java.util.concurre 亦凉/ 2022年09月28日 05:53/ 0 赞/ 151 阅读
相关 多线程-生产者消费者模式(2) 现在用队列来实现一次这个生产者和消费者模型,程序的主要思想如下图。 ![Figure1][] 一个全局的队列,一个锁,一个信号量,CollectImages和SendIm 淡淡的烟草味﹌/ 2022年07月24日 07:29/ 0 赞/ 174 阅读
相关 多线程-生产者消费者模式(1) 这种模型应该也可以归类为生产者消费者模型,但是我觉得这种实现方法效率应该没有用队列来实现效率高。后面再用队列来实现一次。 ![Figure1][] 这个图就是这个程序所 青旅半醒/ 2022年07月24日 07:29/ 0 赞/ 171 阅读
相关 JAVA多线程(三)生产者消费者模式及实现方法 本文介绍两种实现生产者消费者模式的方法。 1 生产者消费者模式 首先来了解什么是生产者消费者模式。该模式也称有限缓冲问题(英语:Bounded-buffer probl 系统管理员/ 2022年05月24日 03:06/ 0 赞/ 98 阅读
相关 JAVA多线程 生产者消费者模式及实现方法 1 生产者消费者模式 首先来了解什么是生产者消费者模式。该模式也称有限缓冲问题(英语:Bounded-buffer problem),是一个多线程同步问题的经典案例。该问 刺骨的言语ヽ痛彻心扉/ 2022年05月21日 06:40/ 0 赞/ 141 阅读
相关 生产者消费者模式--java多线程同步方法的应用 生产者消费者模式是对java多线程的一个基础应用 我们一共设计了货物 生产者 消费者三个类 货物有商标和名称两个属性和对应的设置访问方法 生产者用于设置货物的属性 痛定思痛。/ 2022年03月14日 15:42/ 0 赞/ 114 阅读
还没有评论,来说两句吧...