`

生产者消费者问题--多线程 wait() notify()

    博客分类:
  • java
阅读更多

public class Consume_Produce {
public static void main(String[] args ){
 Bullet b=new Bullet();
 Produce p=new Produce(b);
 Consume c=new Consume(b);
 Thread t1=new Thread(p);
 Thread t2=new Thread(c);
 t1.start();
 t2.start();
 
}
}

 

 

class Bread{
 public int id;
 public Bread(int id){this.id=id;}
}

 

 

class Bullet {
 Bread b[]=new Bread[15];
 public int index=0;//bread的id
 
 public synchronized void produceBread(){
  while(index==15){                         //l篮子的容量是15,当达到15个面包时 生产线程wait
   try{this.wait();
   }catch(InterruptedException e)
   {e.printStackTrace();}
  }
  this.notify();                                 //唤醒别的线程
  b[index]=new Bread(index);
  index++;
  System.out.println("produce-----"+index);
 }
 
 public synchronized Bread consumeBread(){
  while(index==0){                          //当篮子里面没有面包时,消费线程wait()
   try{this.wait();
   }catch(InterruptedException e)
   {e.printStackTrace();}
  }
  this.notify();                                     //唤醒别的线程
  System.out.println("consume-----"+index);
  index--;
  return b[index];
  
 }
}

 


class Produce implements Runnable{   //这是一个生产线程
 Bullet b=null;
 public Produce(Bullet b){this.b=b;}
 public void run(){
 for(int i=0;i<200;i++){ 
  b.produceBread();}
 }
}

 

 

class Consume implements Runnable{ //这是一个消费线程
 Bullet b=null;
 public Consume(Bullet b){this.b=b;}
 public void run(){
  for(int i=0;i<200;i++){ b.consumeBread();}
 }
}

分享到:
评论

相关推荐

    java多线程(生产者与消费者)

    生产者消费者模式是java多线程经典的安全,它用到了同步,资源共享,wait,notify等技术。

    wait_notify_demo

    使用Java多线程的wait和notify方法实现最简单的生产者消费者模式

    如何在Java中正确使用 wait, notify 和 notifyAll

    wait, notify 和 notifyAll,这些在多线程中被经常用到的保留关键字,在实际开发的时候很多时候却并没有被大家重视。本文对这些关键字的使用进行了描述。  在 Java 中可以用 wait、notify 和 notifyAll 来实现...

    多线程实例 有讲解

    多线程实例 生产者、消费者有讲解 下面是其中一小部分代码 public synchronized void putShareChar(char c) { // 通知消费者已经生产,可以消费 if (isProduced) { // 如果产品还未消费,则生产者等待 try { ...

    用Python的线程来解决生产者消费问题的示例

    我们将使用Python线程来解决Python中的生产者—消费者问题。这个问题完全不像他们在学校中说的那么难。 如果你对生产者—消费者问题有了解,看这篇博客会更有意义。 为什么要关心生产者—消费者问题: 可以帮你更好...

    java—多线程的通信、生产者与消费者模式

    一、重点知识 isDaemon 判断是否为守护线程。...如果没有线程处于wait状态,调用notify此时是一个空唤醒 stringBuffer中的同步方法,都是非静态的,因为共用一个this锁就可以了,线程进去调用他的一个方法

    Java多线程的等待唤醒机制代码演示通俗易懂

    生产者和消费者是一个十分经典的多线程协作模式 **常见方法:** - void wait() 当前线程等待,直到被其他线程唤醒 - void notify() 随机唤醒单个线程 - void notifyAll() 唤醒所有线程

    【并发编程】 — 线程间的通信wait、notify、notifyAll

    三个线程顺序打印问题2.1.1 题目2.1.2 题目分析2.1.3 我的答案2.2 生产者消费者问题2.2.1 题目2.2.2 题目分析2.2.3 我的答案 源码地址:https://github.com/nieandsun/concurrent-study.git 1 wait、notify、...

    c++ linux系统下notify的使用

    1.notify的使用 2. wait的使用 3. linux系统下的开发 4.多线程通信 5. 生产者和消费者模式

    python条件变量之生产者与消费者操作实例分析

    本文实例讲述了python条件变量之生产者与消费者操作。分享给大家供大家参考,具体如下: 互斥锁是最简单的线程同步机制,面对复杂线程同步问题,Python还提供了Condition对象。Condition被称为条件变量,除了提供与...

    Day 22多线程、线程通信、线程池和Lambda表达式

    Day 22 Author:ScorpioDong 1. 多线程 1.1 WAITING(无限等待) 当某一线程被执行wait()方法,需要等待其他线程...现在存在两个完全无关的线程,生产者和消费者,但是商品会作为他们两者之间的共享资源。 生产者和消费

    java多线程通信之等待唤醒机制

    典型实例有生产者和消费者,本文也通过实例来分析线程等待唤醒机制。  1、相关API介绍  public final void notify()  唤醒在此对象监视器上等待的单个线程,如果所有线程都在此对象上等待,则会任意选择唤醒...

    汪文君高并发编程实战视频资源全集

    │ 高并发编程第一阶段26讲、多线程下的生产者消费者模型,以及详细介绍notifyAll方法.mp4 │ 高并发编程第一阶段27讲、wait和sleep的本质区别是什么,深入分析(面试常见问题).mp4 │ 高并发编程第一阶段28讲、...

    汪文君高并发编程实战视频资源下载.txt

    │ 高并发编程第一阶段26讲、多线程下的生产者消费者模型,以及详细介绍notifyAll方法.mp4 │ 高并发编程第一阶段27讲、wait和sleep的本质区别是什么,深入分析(面试常见问题).mp4 │ 高并发编程第一阶段28讲、...

    第22天

    1. 多线程 1.1 线程状态 WAITING(无限等待) 当线程被执行wait()方法时,会被施加 “长睡不醒” 的魔法。此时,它不能自己唤醒...而此时消费者发出notify信号,但是生产者不会接收notify信号(因为没有wait),等消费

    Java并发编程原理与实战

    通过生产者消费者模型理解等待唤醒机制.mp4 Condition的使用及原理解析.mp4 使用Condition重写waitnotify案例并实现一个有界队列.mp4 深入解析Condition源码.mp4 实战:简易数据连接池.mp4 线程之间通信之join应用与...

    C++11 并发指南五(stdcondition_variable 详解).docx

    这个机制广泛应用于多线程编程中,例如生产者-消费者模型、读者-写者模型等。 std::condition_variable 的使用通常需要与 std::mutex 配合使用。 std::mutex 是一种互斥锁,用于保护共享资源的访问。 std::...

    UNIX网络编程 卷2 进程间通信 带完整书签,完整目录

    7.3 生产者-消费者问题 127 7.4 对比上锁与等待 131 7.5 条件变量:等待与信号发送 132 7.6 条件变量:定时等待和广播 136 7.7 互斥锁和条件变量的属性 136 7.8 小结 139 习题 139 第8章 读写锁 140 8.1 ...

    UNIX网络编程 卷2:进程间通信

     7.3 生产者-消费者问题 127  7.4 对比上锁与等待 131  7.5 条件变量:等待与信号发送 132  7.6 条件变量:定时等待和广播 136  7.7 互斥锁和条件变量的属性 136  7.8 小结 139  习题 139  第8章 读写锁 140...

    龙果 java并发编程原理实战

    第30节通过生产者消费者模型理解等待唤醒机制00:20:50分钟 | 第31节Condition的使用及原理解析00:17:40分钟 | 第32节使用Condition重写wait/notify案例并实现一个有界队列00:22:05分钟 | 第33节深入解析Condition...

Global site tag (gtag.js) - Google Analytics