`

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

 
阅读更多

/**

*

* 生成者消费者问题

**/

public class ThreadDemo2{

public static void main(String args[])

{

BufferData bd  = new BufferData();

Producer pro = new Producer(bd,"填装者1");

Producer pro2 = new Producer(bd,"填装者2");

Producer pro3 = new Producer(bd,"填装者3");

Consumer con = new Consumer(bd);

 

new Thread(pro).start();

new Thread(pro2).start();

new Thread(pro3).start();

new Thread(con).start();

}

 

 

}

 

 

//生产者

class Producer implements Runnable{

 

private BufferData bd;

private String name;

public Producer(BufferData bd,String name)

{

this.bd  = bd;

this.name = name;

}

public void run()

{

int count = 10000;

while(count >0){

bd.setData(1, name);

count--;

}

}

}

//消费者

class Consumer implements Runnable

{

private BufferData bd;

public Consumer(BufferData bd){

this.bd = bd;

}

public void run()

{

int count = 10000;

while (count>0)

{

bd.getData(1, "");

//System.out.println(bd.toString());

count--;

//bd.notifyAll();

}

}

}

 

class   BufferData{

private  int id = 0;

private  String name="";

private boolean isFull = false;

//填装子弹

public synchronized void setData(int n, String name)

{

try

{

if (isFull)

{

this.wait();

}

this.id += n;

this.name = name;

if(this.id == 10){ isFull = true; this.notifyAll();}

System.out.println(this.name+":"+"装子弹------------"+this.id+",isFull="+isFull);

Thread.sleep(500);

}

catch (Exception e)

{

e.printStackTrace();

}

}

//打枪

public synchronized void getData(int n, String name)

{

 

try

{

if (!isFull)

{

//System.out.println("正在填装......");

this.wait();

}

}

catch (Exception e)

{

e.printStackTrace();

}

 

id = id-n;

if(id<=0)

this.isFull = false;

this.notifyAll();

}

System.out.println("剩余子弹------------"+id+",isFull="+isFull);

}

 

public String toString(){

return "id=" + id + " name=" + name;

}

}

分享到:
评论

相关推荐

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

    记录型信号量通常用于解决生产者-消费者问题,因为它可以记录缓冲池中的空缓冲区和满缓冲区的数量,从而实现生产者和消费者的同步。 解决生产者-消费者问题的方法 为了解决生产者-消费者问题,我们可以使用记录型...

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

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

    JAVA_生产者-消费者

    在Java编程中,"生产者-消费者"模式是一种经典的多线程问题,它涉及到了并发处理和资源管理。这个模式的主要目标是通过分离生产数据和消费数据的过程,提高系统的效率和灵活性。在这个模式中,"生产者"负责生成数据...

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

    2. **编写生产者线程**:创建一个名为 `Producer.java` 的类,实现生产者的逻辑。在这个类中,使用循环来模拟生产过程,并使用信号量确保只有在有空缓冲区的情况下才进行生产。 3. **编写消费者线程**:创建一个名为...

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

    在Java中,我们可以使用`java.util.concurrent`包中的工具类来实现生产者-消费者模式。`BlockingQueue`接口是最常用的实现方式,它提供了线程安全的数据结构,可以用来作为生产者和消费者之间的缓冲区。例如,我们...

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

    通过理解和掌握这些知识点,开发者能够有效地实现生产者-消费者模式,解决并发编程中的数据共享和协作问题。在实际项目中,这个模式常用于优化系统性能,尤其是在I/O密集型或计算密集型的应用中。

    java 编写的生产者与消费者问题

    5. **死锁避免**: 在实现生产者-消费者问题时,必须注意死锁的可能。例如,如果生产者在放入元素前先等待消费者消费,而消费者在取出元素前又等待生产者生产,就可能出现死锁。合理设计同步机制和条件变量的使用可以...

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

    "生产者-消费者"问题是一种经典的多线程同步问题,源于计算机科学中的操作系统领域,用于描述在并发环境中如何协调生产者和消费者之间的操作,确保数据的一致性和避免资源浪费。这个问题的基本设定是有一个共享缓冲...

    JAVA课程设计(生产者-消费者问题)

    【JAVA课程设计(生产者-消费者问题)】是学习多线程编程的一个经典案例,它主要探讨了如何在并发环境中有效地管理和协调生产者线程和消费者线程的交互。在这个设计中,生产者负责生成产品并放入共享资源区,而消费...

    模拟生产者消费者问题(java)

    在计算机科学中,生产者-消费者问题是多线程并发控制中的一个经典问题。它描述了两个不同的线程,生产者负责生成数据,而消费者则负责消耗这些数据。在这个Java实现中,我们将探讨如何使用Java的并发工具来解决这个...

    java生产者-消费者

    根据提供的文件信息,我们可以深入探讨Java中的生产者-消费者模式,并通过具体的代码示例来解析这一模式的关键概念和技术实现。 ### Java生产者-消费者模式概述 生产者-消费者模式是多线程编程中的一种经典模式,...

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

    总的来说,解决生产者-消费者问题需要深入理解线程同步原理,并结合具体的需求进行设计和实现。这个过程不仅锻炼了编程能力,也对并发编程的理解有着重要的实践意义。在实际项目中,这样的并发控制技术广泛应用在...

    生产者-消费者.zip

    在Java中,我们可以使用`java.util.concurrent`包中的工具类来实现生产者-消费者的模型。其中,`BlockingQueue`接口是一个重要的组成部分,它提供了线程安全的队列操作,支持阻塞的插入(put)和删除(take)操作,...

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

    生产者-消费者问题的基本场景是:有一个共享资源(如一个缓冲区),生产者线程负责往这个缓冲区填入数据,而消费者线程则负责从缓冲区取出数据。关键在于,当缓冲区满时,生产者需要等待,直到消费者取走一些数据;...

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

    在Java中实现生产者-消费者问题不仅能够加深对Java多线程编程的理解,还能够锻炼出良好的并发编程思维,这对于未来在软件工程和系统开发等领域的工作至关重要。 总之,基于Java线程机制研究生产者-消费者问题,通过...

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

    在Java中,可以使用`BlockingQueue`接口来实现生产者-消费者模式,它已经内置了线程安全的队列操作。生产者可以使用`offer()`方法添加元素,消费者则用`take()`方法取出元素,这两个方法会自动处理等待和唤醒操作。 ...

    计算机操作系统实验-生产者和消费者(java)

    在 Java 中,我们可以使用多线程编程和同步机制来实现生产者-消费者模型。 生产者-消费者模型的定义 生产者-消费者模型是一种同步机制,用于解决多线程之间的数据共享和访问问题。生产者负责生产数据,并将其存储...

    生产者与消费者 java实现

    本主题将深入探讨生产者与消费者模型的Java实现。 生产者与消费者问题的核心是有一个共享资源(例如,一个缓冲区),生产者不断地生产产品并放入缓冲区,而消费者则从缓冲区取出产品进行消费。关键在于确保生产者...

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

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

Global site tag (gtag.js) - Google Analytics