`
ztianyi312
  • 浏览: 18257 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

生产消费者

    博客分类:
  • java
阅读更多

package com.ztianyi.test;

/**
 * 
 * @author tianji_zhou
 *
 * 缓冲区为5的生产者 消费者协同
 * <p>1.System.out.下面的方法不是线程安全的
 * <p>2.wait(),notify(),notifyAll()必须在同步方法中
 * <p>3.wait()方法最好是在while里面而不是if
 */
public class MultiThreadTest {
 
 int i = 0;
 
 synchronized public void sub()
 {
  while(this.i<1)//if->while 被唤醒的时候需要重新判断
  {
   try {
    this.wait();
   } catch (InterruptedException e) {
    e.printStackTrace();
   }
  }
  
  System.out.print(MultiThreadTest.this.i);
  i--;
  System.out.println("-1="+MultiThreadTest.this.i);
  this.notifyAll();
 }
 
 synchronized public void add(){
 
  while(this.i>4)//if->while 被唤醒的时候需要重新判断
  {
   try {
    this.wait();
   } catch (InterruptedException e) {
    e.printStackTrace();
   }
  }

  System.out.print(MultiThreadTest.this.i);
  i++;
  System.out.println("+1="+MultiThreadTest.this.i);
  this.notifyAll();
 }
 
 public class SubWorker implements Runnable
 {
  public void run(){
   for(int i=0; i<1000; i++)
   {
    sub();
   }
  }
 }
 
 public class AddWorker implements Runnable
 {
  public void run()
  {
   for(int i=0; i<500; i++)
   {
    add();
   }
  }
 }

 /**
  * @param args
  */
 public static void main(String[] args) {
  MultiThreadTest test = new MultiThreadTest();
  
  SubWorker subWorker =  test.new SubWorker();
  AddWorker addWorker = test.new AddWorker();
  
  Thread sub = new Thread(subWorker);
  Thread add1 = new Thread(addWorker);
  Thread add2 = new Thread(addWorker);
  sub.start();
  add1.start();
  add2.start();

 }

}

 


0
3
分享到:
评论

相关推荐

    Java 生产消费者模式

    Java生产消费者模式是一种经典的并发设计模式,用于解决多个线程之间的协作问题。在这个模式中,生产者负责生成数据,而消费者则负责消费这些数据。它基于“缓冲区”概念,即一个有限大小的数据存储区域,生产者将...

    生产消费者模式的C++实现

    利用C++实现的生产消费者模式,每个生产者和消费者都在不同的线程中异步执行。

    生产消费者队列(c#),用于线程的队列自动同步

    本篇将详细讲解如何在C#中构建一个生产消费者队列,以及它如何帮助优化线程处理。 首先,理解生产者消费者模型的基本概念:生产者负责生成数据并放入队列,而消费者则从队列中取出数据进行处理。这种模型使得生产者...

    执行随即机生产消费者进程

    在这个场景中,"执行随即机生产消费者进程"的标题指的是创建随机数量(在这个例子中是5个)的生产者和消费者线程,它们通过共享的缓冲区进行交互。 首先,我们需要理解生产者-消费者模型的基本原理。生产者线程负责...

    进程管理(生产消费者,读写者问题)

    在生产消费者问题中,我们关注的是进程之间的协作和资源管理。生产者消费者问题是一个经典的多线程同步问题,通常通过信号量机制来解决。在这个问题中,生产者进程负责生成产品并放入缓冲区,而消费者进程则从缓冲区...

    Java JDK1.5 生产消费者模式解决方案

    在Java编程语言中,生产者消费者模式是一种经典的多线程设计模式,用于处理并发问题。在JDK 1.5及以后的版本中,Java引入了`java.util.concurrent`包,其中包含了一些强大的并发工具类,如`Lock`接口和`Condition`...

    创业天下:让消费者变成生产消费者.pdf

    《创业天下:让消费者变成生产消费者.pdf》一文,涉及了当前电商平台、互联网商业模式的创新,特别是针对消费者角色的转变,以及新兴技术在电商系统中的应用。文章阐述了“创业天下”这款App如何通过融合分享经济、...

    创业天下:让消费者变成生产消费者.zip

    标题“创业天下:让消费者变成生产消费者”所涉及的核心概念是“生产消费者”理论,这是一个经济学和市场营销中的重要理念。在传统的经济模式中,消费者和生产者是两个独立的角色,但随着互联网和数字技术的发展,这...

    1111_生产消费者文件通信机制_

    在这个场景下,“生产消费者文件通信机制”是一种常见的IPC策略,尤其在C++编程中。这个机制是基于一个简单的概念:生产者进程负责生成数据,而消费者进程则负责消费这些数据。下面我们将详细讨论这种机制。 生产者...

    labview_基于生产消费者模式的多串口采集程序

    基于生产消费者模式的多串口采集程序,用labview进行上位机处理(Serial port acquisition program, based on the pattern of production of consumer PC processing using labview)

    简化生产消费者设计模式.zip

    生产消费者设计院模式是LabView中最常用的设计结构,常用在数据的采集、显示、保存中。 但是在Labview中的标准设计模式中,生产消费者模式是在一个vi中的,必须通过队列的方式连接起来。 附件的Buffer可以实现在...

    生产者消费者代码(C++版)

    在多线程编程中,"生产者-消费者"模型是一个经典的并发问题,它涉及到了如何在多个线程间共享资源并协同工作。本示例是使用C++实现的一个解决方案,结合了Posix信号量和互斥量来确保线程安全和同步。 生产者-消费者...

    线程问题生产者消费者流程图

    生产者消费者流程图; 生产者消费者流程图。

    LinuxC语言实现生产者和消费者模型

    LinuxC语言实现生产者和消费者模型LinuxC语言实现生产者和消费者模型LinuxC语言实现生产者和消费者模型LinuxC语言实现生产者和消费者模型LinuxC语言实现生产者和消费者模型LinuxC语言实现生产者和消费者模型LinuxC...

    labview 基于事件的生产者消费者模式

    labview 基于事件的生产者消费者模式

    生产者-消费者问题的Win32实现

    生产者-消费者问题是多线程编程中的一个经典同步问题,源于操作系统理论,旨在演示如何在多个线程之间安全地共享有限资源。在这个问题中,"生产者"线程负责生成数据,而"消费者"线程则负责处理这些数据。为了确保...

    多进程同步解决生产者消费者问题(c++源码)

    ### 多进程同步解决生产者消费者问题(C++源码解析) #### 一、问题背景与定义 生产者-消费者问题是一种经典的并发编程问题,它最初由Edsger Dijkstra提出,用来展示信号量机制的应用场景。在这个问题中,存在两类...

    生产者消费者

    在操作系统领域,"生产者消费者"问题是一个经典的多线程同步问题,用于模拟现实世界中的生产与消费过程。这个问题由Dijkstra在1965年提出,它涉及到多个并发进程(生产者和消费者)共享一个有限容量的缓冲区,生产者...

    12-基于Redis的消息队列之生产消费者模式1

    本文将详细讲解如何基于Redis构建一个生产消费者模式的消息队列,并介绍相关的依赖配置。 首先,让我们理解生产消费者模式。在这种模式中,生产者负责生成数据并将其放入一个缓冲区(在这里是Redis),而消费者则从...

    maven+springmvc+dubbo+zookeeper的生产消费者模型。

    这是一个maven+springmvc+dubbo+zookeeper的模型包括生产者、消费者、接口等。其实现可参考https://blog.csdn.net/mijichui2153/article/details/81102277。

Global site tag (gtag.js) - Google Analytics