`
88548886
  • 浏览: 49622 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

线程通信(同步唤醒机制)-生产者与消费者

 
阅读更多
package com.companyname;

public class Test {
	public static void main(String[] args) {
		Resource res=new Resource();
		Thread t1=new Thread(new Product(res));
		Thread t2=new Thread(new Product(res));
		Thread t3=new Thread(new Consumer(res));
		Thread t4=new Thread(new Consumer(res));
		t1.start();
		t2.start();
		t3.start();
		t4.start();
	}
}

class Resource {
	private int num = 0;
	private boolean flag=true;

	public synchronized void produce() {
		while (true) {
			if (flag) {
				System.out.println(Thread.currentThread().getName()+"生产......."+(++num));
				flag=false;
			}
			else
			{
				this.notifyAll();    //唤醒对象池上所有冻结的线程
				try {
					this.wait();    //当前线程等待
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
		}
	}
	public synchronized void consume() {
		while (true) {
			if(!flag){
				System.out.println(Thread.currentThread().getName()+"消费"+num);
				flag=true;
			}
			else
			{
				this.notifyAll();
				try {
					this.wait();
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
		}
	}
}

class Product implements Runnable {
	private Resource res;

	public Product(Resource res) {
		this.res = res;
	}

	public void run() {
		res.produce(); // 生产
	}
}

class Consumer implements Runnable {
	private Resource res;

	public Consumer(Resource res) {
		this.res = res;
	}

	public void run() {
		res.consume(); // 消费
	}
}

 

分享到:
评论

相关推荐

    Java线程间的通信----生产者消费者模型

    生产者消费者模型是一种经典的线程同步问题,它模拟了实际生活中的生产过程和消费过程,使得生产者线程可以将数据生产出来,而消费者线程则负责消耗这些数据,两者之间通过共享数据结构进行协同工作。 生产者消费者...

    JAVA实现线程间同步与互斥生产者消费者问题

    本项目通过一个生产者消费者问题的实例,展示了如何在Java中实现线程间的同步与互斥。 生产者消费者问题是经典的并发问题之一,它涉及到两个类型的线程:生产者和消费者。生产者负责生成数据(产品),而消费者则...

    Java多线程-生产者与消费者问题

    通过上述分析,我们了解到生产者与消费者问题的核心在于线程之间的同步与通信。使用Java多线程技术,我们可以有效地解决这一问题,保证系统稳定运行。在实际应用中,还需要根据具体的业务需求调整和优化上述设计方案...

    C++ 多线程通信方式简介并结合生产者-消费者模式代码实现

    本文将深入探讨C++中的多线程通信方式,并结合经典的生产者-消费者模式来阐述其实现。 一、C++多线程基础 C++11引入了标准库`<thread>`,提供了对多线程的支持。创建线程的基本方法是通过`std::thread`类,如下所示...

    基于JAVA线程机制研究生产者-消费者问题.zip

    在Java编程中,线程是并发执行的基本单元,它允许程序在同一时间处理多个任务。生产者-消费者问题是多线程编程中的...生产者-消费者问题的解决方式不仅有助于提升程序的并发能力,还能够加深对Java线程同步机制的理解。

    java多线程实现生产者和消费者

    9. **测试与调试**:多线程问题往往难以复现,因此在编写生产者-消费者代码时,应编写充分的测试用例,包括边界情况,如缓冲区满和空的状态转换。 通过理解和掌握这些知识点,开发者能够有效地实现生产者-消费者...

    OS大作业生产者消费者同步问题的实现

    在操作系统中,生产者-消费者问题是多线程和并发编程中的一个经典问题,它涉及到资源的共享和同步。本大作业旨在让学生理解并熟练运用POSIX提供的同步机制,特别是互斥锁和条件变量,来解决这个问题。以下是相关知识...

    编写程序,运用Win32Api实现生产者与消费者使用缓冲区完成生产者与消费者的关系。模拟生产者和消费者的处理过程,程序中演示同步与互斥的关系。

    通过这个实验,我们深入了解了生产者-消费者问题以及如何使用信号量来解决进程间的同步和互斥问题。此外,还学习了如何使用 Win32 API 进行多线程编程的基本概念和技术。这对于进一步研究操作系统原理和并发编程技术...

    【IT十八掌徐培成】Java基础第08天-05.多线程-生产者-消费者2.zip

    在Java中实现生产者-消费者模型,主要依赖于线程同步机制,包括`wait()`, `notify()` 和 `notifyAll()` 方法,它们都是在 `Object` 类中定义的。这些方法配合 `synchronized` 关键字使用,可以确保线程安全地访问...

    操作系统-生产者与消费案例实践报告手册.docx

    分析传统生产者-消费者算法的优点与不足 - **优点**: - **简洁性**:算法结构简单明了。 - **实用性**:能够有效解决资源分配和同步问题。 - **不足**: - **效率问题**:在某些情况下可能会导致线程频繁阻塞...

    生产者与消费者的实验

    生产者与消费者的模型是计算机科学中的一个经典多线程问题,主要探讨了如何在多线程环境下有效地管理和同步资源,以避免数据竞争和死锁。在这个实验中,我们将模拟一个场景,其中生产者线程负责生成产品并放入共享...

    操作系统生产者——消费者模拟程序

    3. **线程通信**:使用条件变量让线程在适当的时候被唤醒,如缓冲区有空位时唤醒生产者,或缓冲区有数据时唤醒消费者。 4. **性能优化**:考虑线程调度开销,避免不必要的上下文切换。 5. **异常处理**:考虑到可能...

    多线程_生产者与消费者模式示例

    5. **wait/notify机制**:生产者和消费者线程通过`wait()`和`notify()`方法进行通信。当队列满时,生产者调用`wait()`进入等待状态;队列有空位时,消费者完成消费后调用`notify()`唤醒等待的生产者。同样,队列为空...

    操作系统课件中生产者-消费者进程同步问题的程序

    在操作系统领域,生产者-消费者进程同步问题是一个经典的问题,它体现了多进程间协作与通信的基本原理。这个问题的设定是这样的:一个系统中存在两个进程,一个为生产者,负责生成数据;另一个为消费者,负责消费...

    多线程简易实现生产者消费者模式

    生产者消费者模式是一种经典的多线程同步问题解决方案,它源于现实世界中的生产流水线,用于描述生产者(Producer)和消费者(Consumer)之间的协作关系。在这个模式中,生产者负责生成产品并放入仓库,而消费者则从...

    操作系统-生产者与消费者

    操作系统中的“生产者与消费者”问题是一个经典的多线程同步问题,它主要涉及进程通信、资源管理和并发控制等核心概念。在这个问题中,通常有两个进程,一个被称为“生产者”,负责生产数据,另一个称为“消费者”,...

    多线程实例,关于生产者与消费者的问题

    "生产者-消费者问题"是多线程编程中一个经典的同步问题,它涉及到资源的共享和线程间的协作。这个问题的核心在于如何有效地协调生产者线程(负责生产数据)和消费者线程(负责消费数据),使得生产与消费的过程既...

    pandc.rar_生产控制系统_生产者与消费者_生产者-消费者问题

    总之,生产者-消费者问题是一个重要的多线程编程模型,它涉及到线程间的同步和通信,有助于我们理解和设计高效的并发系统。通过这个“pandc.rar”中的实例,我们可以学习如何在实际代码中实现这一模型,并通过进度条...

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

    总结来说,“java多线程(生产者与消费者)”是关于如何在Java中使用同步、线程间通信和共享资源来实现高效且安全的并发编程。通过理解并熟练应用这些概念和工具,开发者可以构建出能够充分利用多核处理器能力的高...

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

    生产者-消费者问题是多线程编程中的一个经典同步问题,主要涉及进程间的协作与通信。在操作系统领域,这个问题常被用来演示如何有效地管理和控制资源的使用。本实验使用Pthread库来解决这个问题,Pthread是POSIX线程...

Global site tag (gtag.js) - Google Analytics