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

生产者与消费者模式

 
阅读更多
生产者生产一个产品,消费者消费一个,生产者要等消费者消费了才可以生产,消费者要等生产者生产了才有消费。

-----------------------
package com.tangkuo.thread.producer.cn;

public class Box {
private int value;//用于存放生产 的产品
//能否生产的标志,true( 可消费,不能生产),false (可生产,不能消费)
private boolean avaliable = false;

public synchronized void put(int value){//生产者
while(avaliable == true){
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}

avaliable = true;
notifyAll();//通知所有等待共享资源的线程
this.value = value;
}

public synchronized int get(){//消费者
while(avaliable == false){
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
avaliable = false;
notifyAll();
return this.value;
}

}


-----------------------------------
package com.tangkuo.thread.producer.cn;

public class Producer extends Thread {
private Box box;
private String name;

public Producer(Box b, String n){
box = b;
name = n;
}

public void run(){
for(int i = 1; i < 6; i++){
box.put(i);
System.out.println("生产者"+ name + " 生产产品:"+i);
try {
sleep((int) (Math.random() * 100));
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}


-----------------------------------------------------
package com.tangkuo.thread.producer.cn;

/**
* 消费者类
* @author Administrator
*
*/
public class Consumer extends Thread {

private Box box;
private String name;

public Consumer(Box b, String n){
box = b;
name = n;
}

public void run(){
for(int i = 1; i < 6; i++){
box.get();
System.out.println("消费者"+ name +"消费产品:"+ i);
try {
Thread.sleep((int) (Math.random() * 100));
} catch (InterruptedException e) {
e.printStackTrace();
}

}
}
}


-------------------------------------------
package com.tangkuo.thread.producer.cn;

public class ProducerConsumerTest {

public static void main(String[] args) {
Box box = new Box();
Producer p = new Producer(box, "001");
Consumer c = new Consumer(box, "002");
p.start();
c.start();
}
}







-------------------------------
分享到:
评论

相关推荐

    多线程_生产者与消费者模式示例

    线程池可以配合生产者消费者模式,例如通过提交任务到线程池来实现生产者,线程池中的工作线程充当消费者角色。 在使用生产者消费者模式时,需要注意以下几点: - **线程安全**:确保所有的操作都是线程安全的,...

    信号灯法实现生产者与消费者模式.rar

    **生产者与消费者模式** 是一个经典的多线程问题,涉及到两个主要角色:生产者负责生成数据,而消费者则负责消耗这些数据。在共享资源的情况下,如何协调两者之间的操作,避免数据竞争和死锁,就成为了一个关键挑战...

    Java 生产者消费者模式

    在Java编程中,生产者消费者模式是一种典型的多线程协作模型,用于解决系统资源供需不平衡的问题。这个模式的核心思想是将生产数据和消费数据的过程解耦,使得生产者可以独立地生产数据,而消费者可以独立地消费数据...

    Java生产者与消费者

    在实际应用中,Java提供了更高级的并发工具类,如`BlockingQueue`,它已经内置了线程安全和阻塞操作,可以简化生产者与消费者模式的实现,提高代码的可读性和可维护性。例如,我们可以使用`ArrayBlockingQueue`作为...

    生产者与消费者 java实现

    生产者与消费者问题在计算机科学中是一个经典的多线程同步问题,主要涉及到进程间的通信和资源的共享。在Java中,我们通常通过`wait()`、`...理解并掌握生产者与消费者模式有助于编写高效、可靠的多线程应用程序。

    生产者 消费者 模式 c++

    生产者消费者模式的基本思想是将数据的生产与消费分离,生产者负责创建数据,而消费者负责处理这些数据。两者之间通过一个缓冲区进行交互,这个缓冲区作为共享资源,需要进行适当的同步控制,以避免生产者过快填满...

    c++生产者与消费者

    总之,生产者与消费者模式是理解和设计多线程程序的重要工具,它不仅在操作系统中有广泛应用,也是并发编程领域的一个基础课题。通过掌握这一模式,开发者能够更好地处理多线程环境下的数据共享和同步问题,提高软件...

    生产者与消费者源代码

    在IT领域,尤其是在多线程编程中,"生产者与消费者"模式是一个经典的并发问题解决方案。这个模式描述了两个或多个线程之间...通过理解并熟练运用生产者与消费者模式,开发者可以更好地设计高效、可扩展的并发应用程序。

    生产者与消费者的设计与实现

    总之,生产者与消费者模式是多线程编程中的一个重要概念,它强调了如何在并发环境中高效且安全地共享资源。在DOS环境下实现这一模式需要克服一些额外的挑战,但通过巧妙地利用同步机制和通信手段,我们可以成功地...

    生产者和消费者

    ## 生产者与消费者模式概述 生产者与消费者模式是一种经典的多线程编程模型,广泛应用于计算机科学领域,特别是在并发编程中。该模式通过将任务分为两部分:一部分负责生成数据(生产者),另一部分负责处理数据...

    java版本的生产者与消费者

    下面我们将分别探讨这三个类在生产者与消费者模式中的作用。 1. `Customer.java`(消费者): 消费者类通常包含一个方法来从共享资源(如队列)中取出并处理产品。在Java中,这可能涉及到使用`BlockingQueue`接口...

    生产者和消费者模式多线程

    创建一个简单的生产者消费者模型,可以使用以下伪代码: ```java class Producer implements Runnable { private final BlockingQueue&lt;String&gt; queue; public Producer(BlockingQueue&lt;String&gt; queue) { this....

    操作系统-生产者与消费者

    - **结果验证**:通过观察运行结果,如缓冲区状态的变化、线程的执行顺序等,可以验证生产者与消费者模式是否正确实现,以及同步机制是否有效防止了数据竞争和死锁现象。 ### 结论 生产者与消费者模式不仅是一个...

    java生产者与消费者

    总结一下,Java中的生产者与消费者模式是多线程编程中的重要设计模式,通过使用`BlockingQueue`等工具可以有效地实现生产者与消费者之间的同步和协作。这种模式广泛应用于各种并发场景,如任务调度、消息传递等。在...

    48.线程间的通信-生产者与消费者模式-一生产者多消费者(操作集合).mp4

    在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。

    labview 基于事件的生产者消费者模式

    labview 基于事件的生产者消费者模式

    46.线程间的通信-生产者与消费者模式-多生产者与多消费者(操作值).mp4

    在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。

    架构设计 -- 生产者/消费者模式

    【生产者/消费者模式】是一种常见的并发编程和系统设计模式,它主要解决的是在多线程环境下,如何协调生产者和消费者之间的数据处理问题。在软件开发中,生产者通常是生成数据的一方,而消费者则是处理这些数据的...

Global site tag (gtag.js) - Google Analytics