`

Java多线程之生产者消费者demo

    博客分类:
  • java
阅读更多
package com.ccy.thread.demo;


class ProducerConsumerDemo 
{
	public static void main(String[] args) 
	{
		Resource r = new Resource();

		Producer pro = new Producer(r);
		Consumer con = new Consumer(r);

		
		Thread t3 = new Thread(con);
		Thread t4 = new Thread(con);

		new Thread(pro).start();
		new Thread(pro).start();
		t3.start();
		t4.start();

	}
}

/*
对于多个生产者和消费者。
为什么要定义while判断标记。
原因:让被唤醒的线程再一次判断标记。


为什么定义notifyAll,
因为需要唤醒对方线程。
因为只用notify,容易出现只唤醒本方线程的情况。导致程序中的所有线程都等待。

*/


class Resource{
	
	private String name;
	private int count = 1;
	private boolean flag = false;
			//  t1    t2
	public synchronized void set(String name)
	{
		while(flag){
			try{
				this.wait();
			}catch(Exception e){
				e.printStackTrace();
			}
		}
			
		this.name = name+"--"+count++;
		System.out.println(Thread.currentThread().getName()+"...生产者.."+this.name);
		flag = true;
		this.notifyAll();
	}


	//  t3   t4  
	public synchronized void out()
	{
		while(!flag){
			try{
				wait();
			}catch(Exception e){
				e.printStackTrace();
			}
		}
			
		System.out.println(Thread.currentThread().getName()+"...消费者........."+this.name);
		flag = false;
		this.notifyAll();
	}
}

class Producer extends Thread
{
	private Resource res;

	Producer(Resource res)
	{
		this.res = res;
	}
	public void run()
	{
		while(true)
		{
			res.set("+生产商品+");
		
	}
}
}

class Consumer implements Runnable
{
	private Resource res;

	Consumer(Resource res)
	{
		this.res = res;
	}
	public void run()
	{
		while(true)
		{
			res.out();
		}
	}
}

 

 

记录与分享,你我共成长 -fromcaicongyang

 

 

 

 

分享到:
评论

相关推荐

    java 多线程生产者消费者模型demo

    Java多线程生产者消费者模型是一种典型的线程协作模式,用于解决并发编程中资源的高效利用和同步问题。在这个模型中,"生产者"线程负责生成数据,而"消费者"线程则负责处理这些数据。为了实现这种模式,Java提供了...

    java线程安全以及生产者消费者demo

    Java线程安全与生产者消费者模型是多线程编程中的两个重要概念,它们在并发处理中扮演着关键角色。在Java中,线程安全是指一个类或者方法在多线程环境下能够正确地处理数据,避免数据的不一致性或竞态条件。而生产者...

    java生产者消费者demo

    这有助于理解Java多线程编程中的同步原理和实践,对于提升并发编程能力大有裨益。 为了深入理解这个demo,你需要阅读并分析`TestProducerAndConsumer`的源代码,查看它如何初始化和使用队列、信号量或条件变量。...

    java多线程练习demo 基本的线程使用方式 生产者消费者练习 龟兔赛跑练习.zip

    总结来说,"java多线程练习demo" 提供了一个学习和实践Java多线程的平台,通过“生产者消费者”和“龟兔赛跑”等例子,我们可以深入理解Java多线程编程的基本原理和实践技巧。这些知识对于开发高并发、高性能的Java...

    JAVA多线程模式高清版+DEMO

    这个压缩包文件"JAVA多线程模式高清版+DEMO"显然是关于Java多线程设计模式的详细教程,很可能包含了理论讲解、代码示例以及实战DEMO。 在Java多线程编程中,了解和掌握以下知识点至关重要: 1. **线程的创建与启动...

    kafka-java-demo 基于java的kafka生产消费者示例

    在"Kafka-java-demo"中,你将看到如何使用这些接口来实现一个简单的生产者和消费者示例。 【Kafka Producer】 Kafka生产者是负责将数据发布到Kafka主题的组件。在Java中,我们可以创建一个Producer实例,配置相关...

    java多线程的条件对象和锁对象demo

    本示例"java多线程的条件对象和锁对象demo"着重探讨了如何利用锁对象和条件对象来精细控制线程的执行流程。 首先,我们需要了解Java中的锁对象。Java提供了多种类型的锁,其中最基础的是`synchronized`关键字,它...

    kafka demo ,两种线程消费方式

    在这个示例中,我们将关注如何使用Java API在Kafka中实现多线程消费,以及单个消费者组内的多线程消费。 首先,我们了解Kafka的基本概念。Kafka是一个发布/订阅模型的消息队列,它包含生产者(Producer)、消费者...

    java IBM MQ 7.5.0 生产者和消费者实例

    在实际应用中,生产者和消费者可能需要在多线程环境中运行,以提高吞吐量和响应速度。因此,理解Java的并发机制和线程安全非常重要。 8. **性能优化**: 对于大规模的消息传递,可能需要考虑使用预分配的缓冲区、...

    高并发多线程处理demo-java.rar

    1. **Java多线程**:Java通过`Thread`类和`Runnable`接口支持多线程编程。在这个示例中,可能会创建多个线程对象,每个对象负责处理队列中的一个任务,以实现并行执行。 2. **并发队列**:并发队列如`...

    springMVC+多线程+kafka的 demo基于maven

    在本项目中,我们探索了如何将...而Kafka则作为数据通道,实现数据在生产者和消费者之间的高效传输。通过修改配置文件中的Kafka集群IP地址,这个demo就可以在不同的环境中运行,展示了这三者在实际应用中的集成和作用。

    Java多线程并发执行demo代码实例

    "Java多线程并发执行demo代码实例" 在Java编程中,多线程并发执行是非常重要的概念,它可以提高程序的执行效率和响应速度。今天,我们通过一个demo代码实例来学习Java多线程并发执行的实现。 知识点1:泛型 在...

    操作系统生产者消费者DEMO

    操作系统中的“生产者消费者问题”是一个经典的多线程同步模型,它主要涉及到进程通信和资源管理,对于理解和解决并发编程中的同步与互斥问题具有重要的理论价值和实践意义。在这个DEMO中,我们将深入探讨这个问题...

    java多线程、锁的教程跟案例

    `demo.docx`可能包含各种多线程编程的示例,如生产者消费者模型、银行转账场景等。`API.docx`可能详细列出了相关类和方法的使用。`多线程.docx`可能是关于Java多线程的深入讲解,涵盖线程安全、线程同步、锁的使用等...

    生产者消费者模式+定时任务demo

    生产者消费者模式是一种多线程设计模式,它用于解决生产数据和消费数据的同步问题,以避免生产者过快生产导致资源浪费,或者消费者过快消费导致无数据可处理的情况。这种模式通常由两个主要角色构成:生产者...

    C++多线程,生产者和消费者模型以及C++全局调用Java方法.zip

    FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。...它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多code都是从头开发的。

    kafka demo 两种线程消费方式

    这种方式适用于处理速度较慢,需要大量计算的任务,通过多线程可以提升单个消费者的处理能力,但需要注意的是,线程间的协调和同步可能引入额外的复杂性。 在"Maven工程"的背景下,这个示例代码很可能是用Java编写...

    java定时器+多线程(池)+java队列Demo

    在“java定时器+多线程(池)+java队列Demo”这个项目中,我们将深入探讨这三个核心概念。 1. **Java定时器(java.util.Timer)**:`Timer`类用于调度周期性的任务执行。它可以安排一个任务在未来某个时间点或定期...

    java_thread_demo

    另外,还有java.util.concurrent包下的BlockingQueue,它可以作为线程间的生产者-消费者模型,实现线程安全的数据交换。 此外,死锁、活锁和饥饿也是多线程编程中需要关注的问题。死锁是指两个或更多线程相互等待...

Global site tag (gtag.js) - Google Analytics