`
modun
  • 浏览: 148539 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

写了个生产者---消费者

    博客分类:
  • j2se
阅读更多
这段代码是在听了马老师的教程后写的,小小的ps一下,听马老师讲课感觉真的很好,期望他能出一些j2ee的视频教程

package cn.zhangxuemin.j2se;

public class TestProducerConsumer {
	public static void main(String[] args) {
		SyncStack ss = new SyncStack();
		Producer p = new Producer(ss);
		Consumer c = new Consumer(ss);
		Thread t1 = new Thread(p,"t1");
		Thread t2 = new Thread(p,"t2");
		Thread t3 = new Thread(c,"t3");
		t1.start();
		t2.start();
		t3.start();
	}
}

class Woto {
	int id ;
	Woto (int id) {
		this.id = id;
	}
	public String toString () {
		return "Woto :"+id;
	}
}

class SyncStack {
	int index = 0;
	Woto[] arryWoto = new Woto[6];
	
	public synchronized void push(Woto wt) {
		while(index == arryWoto.length) {
			try {
				this.wait();
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
		this.notifyAll();
		try {
			Thread.sleep(1000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		arryWoto[index] = wt;
		index++;
	}
	
	public synchronized Woto pop() {
		while(index == 0) {
			try {
				this.wait();
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
		this.notifyAll();
		try {
			Thread.sleep(1000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		index--;
		return arryWoto[index];
	}
}

class Producer implements Runnable {
	SyncStack ss = null;
	Producer(SyncStack ss) {
		this.ss = ss;
	}
	
	public void run() {
		for(int i=0; i<20; i++) {
			Woto wt = new Woto(i);
			ss.push(wt);
			System.out.println(Thread.currentThread().getName()+"生产了: "+wt);
		}
	}
}

class Consumer implements Runnable {
	SyncStack ss = null;
	Consumer(SyncStack ss) {
		this.ss = ss;
	}
	public void run() {
		for(int i=0; i<40; i++) {
			Woto wt = ss.pop();
			System.out.println(Thread.currentThread().getName()+"消费了: " +wt);
		}
	}
}
分享到:
评论

相关推荐

    利用记录型信号量解决生产者-消费者问题.doc

    在计算机科学中,生产者-消费者问题是一个经典的同步问题,描述了多个进程之间的协作和资源竞争。在这里,我们将讨论使用记录型信号量解决生产者-消费者问题的方法。 生产者-消费者问题 生产者-消费者问题是一个...

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

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

    用多进程同步方法演示“生产者-消费者”问题

    1、设计目的:通过研究Linux的进程机制和信号量,实现生产者消费者问题的并发控制。 2、说明:有界缓冲区内设有20个存储单元,放入取出的产品设定为1-20个整数。 3、设计要求: 生产者和消费者进程的数目不固定,可...

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

    生产者-消费者问题是计算机科学中的一个经典问题,主要涉及多线程或多进程同步。这个问题在操作系统课程中常被用来讲解进程间的通信和同步机制。在这个场景中,我们讨论的是在Linux环境下,如何通过多进程的方式解决...

    生产者-消费者问题的模拟实现(课设含源代码).doc

    - **多个生产者和消费者**:至少有两个生产者和消费者进程,他们之间需要共享对缓冲区操作的函数代码。 - **显示状态**:每个生产者和消费者在操作后需要显示缓冲区的当前状态,包括全部内容、当前指针位置以及执行...

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

    这个模型是基于一个假设:有一个缓冲区,生产者线程负责往里面放入产品,而消费者线程则负责取出并消费这些产品。 在操作系统实验中,实现生产者-消费者模型可以帮助我们理解线程的同步机制,如互斥锁(mutex)和...

    linux下用多进程同步方法解决生产者-消费者问题源代码

    生产者-消费者模型通常包括两个角色:生产者进程负责生成数据,而消费者进程则负责消费这些数据。在一个共同的数据缓冲区中,生产者将产品放入,消费者从中取出。关键在于,当缓冲区满时,生产者应停止生产直到消费...

    模拟“生产者-消费者”解决过程及方法

    在生产者-消费者问题中,用于保证同一时间只有一个线程(生产者或消费者)可以访问缓冲区。 - **信号量(Semaphore)**:用于控制对公共资源的访问数量,可以理解为一种计数器。在这里,我们可以使用一个二进制信号...

    生产者-消费者模型模拟进程调度

    内含多个实验文档与可运行的代码 ...1. 生产者消费者对缓冲区进行互斥操作。 2. 缓冲区大小为10,缓冲区满则不允许生产者生产数据,缓冲区空则不允许消费者消费数据。 3. 生产者消费者各循环操作10次。

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

    生产者-消费者模型涉及到两个主要角色:生产者(Producer)和消费者(Consumer)。生产者负责生成数据或产品,并将其放入一个共享的缓冲区;而消费者则从这个缓冲区中取出并消费这些数据或产品。在我们的例子中,有...

    生产者消费者问题

    生产者消费者问题,C++。生产者-消费者(producer-consumer)问题,也称作有界缓冲区(bounded-buffer)问题,两个进程共享一个公共的固定大小的缓冲区。其中一个是生产者,用于将消息放入缓冲区;另外一个是消费者...

    进程同步与互斥 生产者与消费者问题--操作系统大作业

    生产者-消费者问题是一个经典的进程同步问题,涉及到两个进程(或线程)——生产者和消费者。生产者负责生产数据项并将其放入一个共享缓冲区,而消费者则从这个缓冲区中取出数据项进行处理。为了保证正确性,需要...

    jchc.rar_tearshmj_生产者_生产者-消费者问题 c++ _生产者和消费者_生产者消费者

    在本项目中,我们将探讨这个问题,并以C++语言为基础,创建一个在Windows 2000环境下运行的控制台应用程序,通过多线程模拟生产者和消费者的行为。 首先,我们要理解生产者-消费者模型的基本概念。在这个模型中,...

    以记录型信号量实现生产者-消费者问题

    以记录型信号量实现生产者-消费者问题 实验目的: 1.加深对进程同步概念的理解。 2.理解多道程序环境中,不同进程对资源访问及相互合作进程的关系的处理方法。 实验要求: 利用C语言程序模拟生产者-消费者问题和哲学...

    编程模拟实现生产者-消费者进程

    在生产者-消费者问题中,需要确保消费者不会从空缓冲区中读取数据,同时生产者也不会向满缓冲区写入数据。 - **互斥**:指同一时间内只有一个进程可以访问某个资源或执行某段代码。在本例中,有界缓冲区作为一个...

    操纵系统课程设计生产者-消费者

    - 在生产者-消费者问题中,对缓冲区的读写操作需要互斥锁来保护,确保在任一时刻,只允许一个线程(生产者或消费者)操作缓冲区。 5. **信号量**: - 信号量是另一种同步机制,它可以表示和控制资源的数量。 - ...

    生产者-消费者问题.cpp

    一个有n个缓冲区的缓冲池,生产者一次向一个缓冲区中投入消息,消费者从一个缓冲区中取得。生产者——消费者问题实际上是相互合作进程关系的一种抽象。该类问题不允许消费者进程到一个空缓冲区中取产品,同时也不...

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

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

    编程实现生产者消费者或读写者的同步问题

    本文将详细介绍如何通过编程方式解决生产者消费者问题,这是一个经典的多线程同步问题。在本例中,我们将采用C++语言结合Windows API来实现。该示例程序展示了如何在同一个进程地址空间内,让多个线程(生产者线程与...

Global site tag (gtag.js) - Google Analytics