`

java多线程之生产者与消费者问题的简单模拟

阅读更多

//临界资源类
class Resource{
private String products[];
int empty,full;
int in, out;

public Resource(){
products = new String[10];
empty = 10;
full = 0;
in = 0;
out = 0;
}

public String[] getProducts(){
return products;
}

public synchronized void put(String product){
if(empty == 0){
try{
wait();
}catch(InterruptedException ie){
ie.printStackTrace();
}
}
empty--;
full++;
products[in] = product;
in = (in + 1) % 10;
notifyAll();
}

public synchronized String get(){
String product;
if(full == 0){
try{
wait();
}catch(InterruptedException ie){
ie.printStackTrace();
}
}
full--;
empty++;
product = products[out];
out = (out + 1) % 10;
notifyAll();
return product;
}


}

//生产者进程类

class Producer implements Runnable{
private Resource bufarea;//缓冲区

public Producer(Resource buf){
this.bufarea = buf;
}

public void run(){
for(int i = 0; i <bufarea.getProducts().length; i++){
String product = "product" + i;
bufarea.put(product);
System.out.println("The producer has produced:" + product);
try{
Thread.sleep(200);
}catch(InterruptedException ie){
ie.printStackTrace();
}

}
}
}

//消费者线程类

class Consumer implements Runnable{
private Resource bufarea;//缓冲区

public Consumer(Resource buf){
this.bufarea = buf;

}

public void run(){
for(int i = 0; i < bufarea.getProducts().length; i++){
String product = bufarea.get();
System.out.println("The consumer has consumed:" + product);
try{
Thread.sleep(500);

}catch(InterruptedException ie){
ie.printStackTrace();
}
}
}

}

public class ProducerConsumer{

public static void main(String args[]){
Resource resource = new Resource();
Producer p = new Producer(resource);
Consumer c = new Consumer(resource);
Thread producer = new Thread(p);
Thread consumer = new Thread(c);
producer.start();
consumer.start();
}
}

分享到:
评论

相关推荐

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

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

    操作系统课程设计——模拟生产者与消费者(java)

    在生产者---消费者问题中应注意(信号量名称以多个生产者和多个消费者中的为例):首先,在每个程序中用于互斥的wait(mutex)和signal(mutex)必须成对出现;其次,对资源信号量empty和full的wait和signal操作,同样...

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

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

    操作系统课设-生产者消费者问题.zip

    而本程序正是基于这种思想设计出来的,用来模拟生产者消费者问题的解决过程。 本程序在运行时提供友好的交互界面,且操作简单,在模拟过程中各种情况有相应文字提示,并伴有相应的图像变化,如:当没有产品可消费的...

    java多线程实例

    java程序模拟生产者消费者问题,多线程应用

    java多线程与并发库高级处理.txt

    如果对什么是线程、什么...说这个话其实只有一半对,因为反应“多角色”的程序代码,最起码每个角色要给他一个线程吧,否则连实际场景都无法模拟,当然也没法说能用单线程来实现:比如最常见的“生产者,消费者模型”。

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

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

    java模拟阻塞队列

    实现java模拟阻塞队列的例子,该代码包括,阻塞队列实现生产者,消费者。和模拟阻塞队列实现生产者及消费者模式,帮助你更好的理解java多线程

    multithreading:解决Java中最著名的多线程问题

    生产者-消费者问题 ZeroEvenOdd(任务是将数字从1打印到用户给定的数字。一个线程打印0,然后等待其他线程之一打印自己的数字,第二个线程仅打印偶数,第三个线程仅打印奇数) H20(一个线程产生一个氢原子,第二...

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

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

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

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

    Java开发技术大全(500个源代码).

    producer_consumer.java 演示生产者-消费者线程 consumer.java 消费者线程 producer.java 生产者线程 common.java 公有类 第9章 示例描述:本章学习运行时类型识别。 Candy.java 一个用来测试的简单类 ...

    java源码包---java 源码 大量 实例

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...

    JAVA上百实例源码以及开源项目源代码

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...

    java源码包4

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 ...

    java源码包3

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 ...

    java源码包2

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 ...

    JAVA上百实例源码以及开源项目

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...

    操作系统课程设计之多道程序缓冲区协调操作

    java实现生产者消费者进程(记录型信号量)同步互斥。有三个buffer缓冲区,有多个put线程不断往第一个buffer缓冲区放入字符,有多个move线程从第一个buffer缓冲区取出字符放入buffer2或buffer3中,有多个get线程从...

Global site tag (gtag.js) - Google Analytics