`
wenhai_zhang
  • 浏览: 186242 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

典型的多线程--生产和消费

    博客分类:
  • java
阅读更多

实体

//教材
public class Book {
	private int id;

	public Book(int id) {
		this.id = id;
	}

	@Override
	public String toString() {
		return "教材" + id;
	}

}

 

 

仓库

public class ChangKu {
	//仓库大小
	private int index = 0;

	Book[] booklist = new Book[10];

	//同步入库
	public synchronized void put(Book book) {
		if (index >= 9) {
			try {
				System.out.println("仓库满了,等待取教材");
				this.wait();
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
		booklist[index] = book;
		index++;
		this.notify();
	}

	//同步出库
	public synchronized Book get() {
		if (index == 0) {
			try {
				System.out.println("仓库空了,等待存教材");
				this.wait();
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
		Book book = booklist[--index];
		this.notify();
		return book;
	}
}

 

 

生产者

import java.util.Random;

public class Producer implements Runnable {
	ChangKu ck = null;

	public Producer(ChangKu ck) {
		this.ck = ck;
	}

	public void run() {
		while (true) {
			Book book = new Book((int) (Math.random() * 1000));
			ck.put(book);
			System.out.println("放入:" + book);
		}
	}
	
	

}

 

 

消费者

public class Consumer implements Runnable {
	ChangKu ck = null;

	public Consumer(ChangKu ck) {
		this.ck = ck;
	}

	public void run() {
		while (true) {
			Book book = ck.get();
			System.out.println("ȡ��取出" + book);
		}
	}

}

 

 

测试

public class TestPC {

	public static void main(String[] args) {
		ChangKu ck = new ChangKu();

		Producer pd = new Producer(ck);
		Consumer cs = new Consumer(ck);

		//生成线程
		Thread producer = new Thread(pd);
		//消费线程
		Thread consumer = new Thread(cs);
		
		producer.setName("put");
		consumer.setName("get");
		
		producer.start();
		consumer.start();
	}

}

 

分享到:
评论

相关推荐

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

    ### Java多线程-生产者与消费者问题 #### 一、生产者与消费者问题概览 **1.1 概要** 生产者与消费者问题是计算机科学中一个多线程同步的经典问题。它描述了两个线程如何共享有限资源的场景:一个是生产者...

    生产者-消费者多线程处理

    在我们的例子中,有一个生产者和两个消费者,这意味着数据生成的速度和消费的速度是不同的,需要通过多线程来协调它们之间的交互。 为了实现这个模式,我们需要确保以下条件得到满足: 1. **互斥访问**:当生产者...

    C++ builder 多线程实例(生产-消费)

    生产者-消费者问题是一个典型的同步问题,旨在展示如何在共享资源之间协调两个或更多线程的活动。在这个模型中,我们有两个主要的角色:生产者和消费者。生产者负责创建或生产数据,而消费者则负责处理这些数据。...

    多线程--生产者消费者问题[1][收集].pdf

    【生产者消费者问题】是多线程编程中的经典问题,主要涉及到进程同步和互斥的概念。在操作系统中,生产者负责生成数据,而消费者则负责消耗这些数据。两者通过一个有限大小的缓冲区进行交互,当缓冲区满时,生产者...

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

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

    用多线程同步方法解决生产者-消费者问题(操作系统课设

    生产者-消费者问题是操作系统中经典的问题之一,它是指在多线程环境下,多个生产者线程和消费者线程访问同一个共享缓冲区,导致缓冲区的数据混乱和不一致的问题。 在解决生产者-消费者问题时,需要使用同步机制来...

    用多线程同步方法解决生产者-消费者问题

    生产者-消费者问题是多线程同步的一个经典案例,主要探讨如何在并发环境下,确保生产者进程和消费者进程之间正确地共享资源,避免数据竞争和死锁。在这个问题中,生产者进程负责创建产品并将产品放入缓冲区,而消费...

    linux下的多线程实例--生产者消费者

    本篇文章将详细解析一个基于Linux环境下的多线程示例程序,该程序通过生产者消费者模型实现数据的生产和消费过程。 #### 一、程序背景与目的 生产者消费者模型是多线程编程中的一个经典案例,主要用于解决资源竞争...

    多线程实现生产者---消费者模型

    通过分析和理解这段代码,我们可以更好地掌握多线程编程和并发控制的概念,这对于理解和优化多线程应用程序至关重要。同时,这也是操作系统课程中的一个重要实践环节,帮助学生理论联系实际,提升解决实际问题的能力...

    Java多线程实现生产者消费者

    本示例中的“生产者-消费者”模型是一种经典的多线程问题,它模拟了实际生产环境中的资源分配与消耗过程。下面我们将详细探讨如何在Java中实现这个模型。 首先,我们要理解生产者-消费者模型的基本概念。在这个模型...

    生产者-消费者的Linux多线程实现.pdf

    本文将详细地阐述 Linux 下利用互斥锁、条件变量、线程管理等相关函数实现多线程生产者-消费者问题,以提高资源利用率。 线程基本概念 线程是进程的一条执行路径,它包含独立的堆栈和 CPU 寄存器状态,每个线程...

    Java多线程 生产者-消费者模式

    生产者-消费者模式是一种经典的多线程设计模式,用于解决数据共享问题,尤其是在一个线程生产数据而另一个线程消费数据的情况下。在这个模式中,生产者负责生成数据并放入共享的数据结构(如队列),而消费者则从这...

    操作系统-创建多线程-读者写者

    示例代码展示了一个简单的多线程程序,其中包含了生产者线程和消费者线程的创建过程。具体来说: 1. **生产者线程** (`producer` 函数): 当线程ID为偶数时创建。此线程仅打印出一条消息“`MyThreadfirst`”,然后...

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

    "生产者-消费者"模型是多线程问题中的经典案例,它揭示了如何通过线程间的协作来实现数据共享和高效利用资源。今天我们将深入探讨这个主题。 生产者-消费者模型是由两个主要角色构成:生产者和消费者。生产者负责...

    线程经典题目<生产-消费>

    本话题将深入探讨一个经典的多线程问题——“生产者-消费者”模型,以及如何在VC++环境下利用信号和互斥量来解决这个问题。 生产者-消费者问题是一个典型的同步问题,涉及两个或多个线程之间的协作:生产者线程负责...

    多线程间通信:多生产者-多消费者实例

    在IT领域,多线程间通信是并发编程中的重要概念,尤其在服务器端应用和高并发系统中。本文将深入探讨“多生产者-多消费者”模式,这是一种经典的线程同步问题,旨在优化资源的利用和提高系统的效率。在这个模式中,...

    多线程同步方法解决生产者-消费者问题(linux线程实现)

    设计要求:(1)每个生产者和消费者对有界缓冲区进行操作后,即时显示有界缓冲区的全部内容,当前指针位置和生产者/消费者线程的标识符.(2)生产者和消费者各有两个以上.(3)多个生产者或多个消费者之间须有共享对缓冲区...

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

    "生产者-消费者"模式是多线程编程中的一个经典设计模式,它体现了线程间的协作和同步。在这个模式中,"生产者"线程负责创建资源,而"消费者"线程则负责消耗这些资源。这个模式在实际应用中非常常见,例如在消息队列...

Global site tag (gtag.js) - Google Analytics