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();
}
}
分享到:
相关推荐
Java生产消费者模式是一种经典的并发设计模式,用于解决多个线程之间的协作问题。在这个模式中,生产者负责生成数据,而消费者则负责消费这些数据。它基于“缓冲区”概念,即一个有限大小的数据存储区域,生产者将...
利用C++实现的生产消费者模式,每个生产者和消费者都在不同的线程中异步执行。
本篇将详细讲解如何在C#中构建一个生产消费者队列,以及它如何帮助优化线程处理。 首先,理解生产者消费者模型的基本概念:生产者负责生成数据并放入队列,而消费者则从队列中取出数据进行处理。这种模型使得生产者...
在这个场景中,"执行随即机生产消费者进程"的标题指的是创建随机数量(在这个例子中是5个)的生产者和消费者线程,它们通过共享的缓冲区进行交互。 首先,我们需要理解生产者-消费者模型的基本原理。生产者线程负责...
在生产消费者问题中,我们关注的是进程之间的协作和资源管理。生产者消费者问题是一个经典的多线程同步问题,通常通过信号量机制来解决。在这个问题中,生产者进程负责生成产品并放入缓冲区,而消费者进程则从缓冲区...
在Java编程语言中,生产者消费者模式是一种经典的多线程设计模式,用于处理并发问题。在JDK 1.5及以后的版本中,Java引入了`java.util.concurrent`包,其中包含了一些强大的并发工具类,如`Lock`接口和`Condition`...
《创业天下:让消费者变成生产消费者.pdf》一文,涉及了当前电商平台、互联网商业模式的创新,特别是针对消费者角色的转变,以及新兴技术在电商系统中的应用。文章阐述了“创业天下”这款App如何通过融合分享经济、...
标题“创业天下:让消费者变成生产消费者”所涉及的核心概念是“生产消费者”理论,这是一个经济学和市场营销中的重要理念。在传统的经济模式中,消费者和生产者是两个独立的角色,但随着互联网和数字技术的发展,这...
在这个场景下,“生产消费者文件通信机制”是一种常见的IPC策略,尤其在C++编程中。这个机制是基于一个简单的概念:生产者进程负责生成数据,而消费者进程则负责消费这些数据。下面我们将详细讨论这种机制。 生产者...
基于生产消费者模式的多串口采集程序,用labview进行上位机处理(Serial port acquisition program, based on the pattern of production of consumer PC processing using labview)
生产消费者设计院模式是LabView中最常用的设计结构,常用在数据的采集、显示、保存中。 但是在Labview中的标准设计模式中,生产消费者模式是在一个vi中的,必须通过队列的方式连接起来。 附件的Buffer可以实现在...
在多线程编程中,"生产者-消费者"模型是一个经典的并发问题,它涉及到了如何在多个线程间共享资源并协同工作。本示例是使用C++实现的一个解决方案,结合了Posix信号量和互斥量来确保线程安全和同步。 生产者-消费者...
生产者消费者流程图; 生产者消费者流程图。
LinuxC语言实现生产者和消费者模型LinuxC语言实现生产者和消费者模型LinuxC语言实现生产者和消费者模型LinuxC语言实现生产者和消费者模型LinuxC语言实现生产者和消费者模型LinuxC语言实现生产者和消费者模型LinuxC...
labview 基于事件的生产者消费者模式
生产者-消费者问题是多线程编程中的一个经典同步问题,源于操作系统理论,旨在演示如何在多个线程之间安全地共享有限资源。在这个问题中,"生产者"线程负责生成数据,而"消费者"线程则负责处理这些数据。为了确保...
### 多进程同步解决生产者消费者问题(C++源码解析) #### 一、问题背景与定义 生产者-消费者问题是一种经典的并发编程问题,它最初由Edsger Dijkstra提出,用来展示信号量机制的应用场景。在这个问题中,存在两类...
在操作系统领域,"生产者消费者"问题是一个经典的多线程同步问题,用于模拟现实世界中的生产与消费过程。这个问题由Dijkstra在1965年提出,它涉及到多个并发进程(生产者和消费者)共享一个有限容量的缓冲区,生产者...
本文将详细讲解如何基于Redis构建一个生产消费者模式的消息队列,并介绍相关的依赖配置。 首先,让我们理解生产消费者模式。在这种模式中,生产者负责生成数据并将其放入一个缓冲区(在这里是Redis),而消费者则从...
这是一个maven+springmvc+dubbo+zookeeper的模型包括生产者、消费者、接口等。其实现可参考https://blog.csdn.net/mijichui2153/article/details/81102277。