`

线程—代码模拟—生产者-消费者

阅读更多
尚学堂—马士兵-java系列网上免费视频教程

知识点:
1.Thread.sleep();
2.Runnable接口
3.Object.wait()
4.Object.notify();
5.if 和 While 的区别
6.synchronized 关键字

ProducerConsumer.java

1.其实,编译后会生成5个class文件。但只需运行 ProducerConsumer.class即可。
2.如果想在你的console中显示中文,请将.java文件的编码设为GB2312

/**
 * 【生产者与消费者】
 * 
 * 注意:
 * 1、在使用wait()时,wait()最好写在while中。不要写在if else中。
 * 2、wait()语句只能使用在synchronized语句中,用于使synchronize释放对其内部对象的锁定。
 * 3、只要使用了wait(),在while外面一定要用notify();用于通知其它线程可以执行了。
 *
 */

public class ProducerConsumer {
	public static void main(String[] args){
		SyncStack ss = new SyncStack();
		Producer p = new Producer(ss);
		Consumer c = new Consumer(ss);
		new Thread(p).start();
		new Thread(c).start();
	}
}

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

class SyncStack{
	int index = 0;
	Wotou[] arrWt = new Wotou[6];
	
	public synchronized void push(Wotou wt){
		while(index == arrWt.length){
			try{
				this.wait();
			}catch(InterruptedException e){
				e.printStackTrace();
			}
		}
		this.notify();
		arrWt[index] = wt;
		index ++;
	}
	public synchronized Wotou pop(){
		while(index == 0){
			try{
				this.wait();
			}catch(InterruptedException e){
				e.printStackTrace();
			}
		}
		this.notify();
		index --;
		return arrWt[index];
		
	}
}

class Producer implements Runnable{
	SyncStack ss = null;
	Producer(SyncStack ss){
		this.ss = ss;
	}
	public void run(){
		for(int i=0;i<20;i++){
			Wotou wt = new Wotou(i);
			ss.push(wt);
			System.out.println("生产了:"+ wt);
			try{
				Thread.sleep(500);
			}catch(InterruptedException e){
				e.printStackTrace();
			}
		}
	}
}

class Consumer implements Runnable{
	SyncStack ss = null;
	Consumer(SyncStack ss){
		this.ss = ss;
	}
	public void run(){
		for(int i=0;i<20;i++){
			Wotou wt = ss.pop();
			System.out.println("消费了:"+wt);
			try{
				Thread.sleep(500);
			}catch(InterruptedException e){
				e.printStackTrace();
			}
		}
	}
}










--
分享到:
评论

相关推荐

    多线程代码 经典线程同步互斥问题 生产者消费者问题

    a: 创建一个线程 ...h: problem1 生产者消费者问题 (1生产者 1消费者 1缓冲区) problem1 more 生产者消费者问题 (1生产者 2消费者 4缓冲区) problem2 读者与写着问题 I: 信号量 semaphore 解决线程同步问题

    操作系统课设用多进程同步方法演示“生产者-消费者”问题

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

    操作系统课程设计生产者和消费者问题源代码

    在Windows2000环境下,创建一个控制台进程,在此进程中创建n个线程来模拟生产者或者消费者。这些线程的信息由本程序定义的“测试用例文件”中予以指定。 该文件的格式和含义如下: 3 1 P 3 2 P 4 3 C 4 1 4 P 2 5 C ...

    生产者-消费者模型模拟进程调度,带报告,课程设计

    实验一 生产者-消费者模型模拟进程调度 一、实验任务 1、在WINDOWS 2000环境下,创建一个控制台进程,此进程包括4个线程:2个生产者线程和2个消费者线程。 2、用信号量机制解决进程(线程)的同步与互斥问题。 二、...

    生产者消费者问题(信号量)(linux)实现代码

    参考教材中的生产者消费者算法,创建5个进程,其中两个进程为生产者进程,3个进程为消费者进程。一个生产者进程试图不断地在一个缓冲中写入大写字母,另一个生产者进程试图不断地在缓冲中写入小写字母。3个消费者...

    操作系统课程设计——生产者消费者问题Java图形界面动态演示

    设计目的:通过研究Linux 的进程机制和信号量实现生产者消费者问题的并发控制。说明:有界缓冲区内设有20 个存储单元,放入/取出的数据项设定为1‐20 这20 个整型数。设计要求:1)每个生产者和消费者对有界缓冲区...

    生产者消费者问题

    操作系统的经典生产者消费者问题 拿来和大家共享 MFC实现 可以实现已试过, 希望不要侵权 给大家共享以下

    操作系统课内实习,模拟生产者、消费者模型

    内容概要:基于QT Creator环境的多线程编程验证互斥的原理,通过使用semaphore,mutex等控制变量,实现对生产者消费者模型的真实模拟。 适合人群:初学操作系统的学生 能学到什么:调用了Qt多线程类库QThread进行...

    生产者与消费者 进程的同步与互斥模拟

    通过实验模拟生产者与消费者之间的关系,了解并掌握他们之间的关系及其原理。由此增加对进程同步的问题的了解。 实验要求: 每个进程有一个进程控制块(PCB)表示。进程控制块可以包含如下信息:进程类型标号、进程...

    C++实现多线程生产者消费者

    使用MFC相关的功能函数来模拟经典进程互斥和同步问题

    使用多线程模拟MQ系统应用

    说明:本人在给Java游戏开发特训班讲解多线程时,需要说明多线程同步的问题,其中讲解了使用“生产者-消费者”模型来解决同步问题。可是当时特训班的学生不是很明白,特别是不明白这个模型怎么使用。这可能是由于...

    操作系统生产者与消费者问题Java简单模拟实现

    利用Java多线程实现的操作系统的生产者与消费者算法,主要用到了线程的同步,等待与唤醒操作。

    生产者消费者模拟MFC源码

    该资源是用mfc实现生产者消费者线程操作的模拟过程,全部代码都在里面,只需要在vs2010MFC中运行即可!

    生产者消费者问题实验报告和代码实现

    1、通过编写程序,掌握基本的同步互斥算法,理解生产者和消费者模型。 2、了解多线程并发执行机制,线程间的同步和互斥。 3、学习使用同步对象,掌握相应的函数。

    生产者消费者程序设计.doc

    它们之间的关系如下图所示: 生产者1 2 3 … N 消费者 图9.4 生产者消费者问题描述 这里用有名管道来模拟有限缓冲区,用信号量来解决生产者消费者问题中的同步和互斥 问题。 3.实验代码 /*product.c*/ #include ...

    多线程—模拟售火车票程序 TicketProductorConsumerThreadPrj

    车票购票 每次产生20张票(由生产者线程完成),由3台售票机同时循环向外出票(售票机就是消费者线程),编写一个卖票模拟小系统 要求: 20张票卖完了,售票机就不能卖了,等有票才可以; 产生了20张票,要等票卖了一些...

    操作系统进程管理源代码

    用VC++编写的 1.进程的创建 2.线程的创建及线程函数的设计 3.进程间基于共享存储和事件的通讯 4.编程模拟生产者-消费者问题

    操作系统实验报告——进程同步与互斥.doc

    生产者-消费者问题是指在多个进程中,生产者进程生产产品,并将其存储在缓冲区中,而消费者进程从缓冲区中取出产品。生产者和消费者之间需要进行同步,以避免出现问题。 在本实验中,我们使用生产者-消费者模型来...

    生产者消费者问题—操作系统课程设计—英文

    一种竞争严重的,使用Java语言模拟经典的线程通信的生产者消费者问题的课程设计报告。多线程随机竞争,所以每次运行结果并不相同。代码在eclipse中测试可用。 报告除了代码注释外,全部是英文。

    操作系统课程设计报告--基于Windows进程互斥实现机制.doc

    本报告是关于基于Windows操作系统的进程互斥实现机制的课程设计报告,旨在验证多线程编程中关键元素的定义与使用,并通过使用Semaphore、Mutex等控制元素,实现对生产者消费者模型的真实模拟。 一、多线程编程的...

Global site tag (gtag.js) - Google Analytics