`
onlyor
  • 浏览: 380575 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

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

    博客分类:
  • java
阅读更多

public class ProducerConsumer {

    public static void main(String[] args) {

        ProductBox pb = new ProductBox();
        Producer p = new Producer(pb);
        Consumer c = new Consumer(pb);

        Thread pThread = new Thread(p);
        Thread cThread = new Thread(c);
        
        pThread.setPriority(Thread.MAX_PRIORITY);
        cThread.setPriority(Thread.MIN_PRIORITY);

        pThread.setName("Producer");
        cThread.setName("Consumer");
        
        pThread.start();
        cThread.start();
    }

}


class Product {

    int id;

    public Product(int id) {
        super();
        this.id = id;
    }

    public String toString() {
        return "Product:" + id;
    }
}


class ProductBox {

    Product[] productbox = new Product[6];

    int       index      = 0;


    public ProductBox() {
        super();
    }


    public synchronized void push(Product p) {

        while (index == productbox.length) {
            try {
                System.out.println(Thread.currentThread().getName() + ".push()");
                this.wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        this.notify();
        productbox[index] = p;
        index++;
    }


    public synchronized Product pop() {

        while (index == 0) {
            try {
                System.out.println(Thread.currentThread().getName() + ".pop()");
                this.wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        this.notify();
        index--;
        return productbox[index];

    }
}


class Producer implements Runnable {

    ProductBox productbox = null;

    public Producer(ProductBox productbox) {
        super();
        this.productbox = productbox;
    }

    public void run() {

        for (int i = 0; i < 10; i++) {
            Product p = new Product(i);
            productbox.push(p);
            System.out.println("++produce:" + p);

            try {
                Thread.sleep((int) (Math.random() * 200));
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

}

class Consumer implements Runnable {

    ProductBox productbox = null;

    public Consumer(ProductBox productbox) {
        super();
        this.productbox = productbox;
    }

    public void run() {
        for (int i = 0; i < 10; i++) {
            Product p = productbox.pop();
            System.out.println("--consume:" + p);

            try {
                Thread.sleep((int) (Math.random() * 1000));
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

}
 
分享到:
评论

相关推荐

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

    在并发编程中,"生产者-消费者"模式是一种经典的解决问题的范式,用于协调两个或更多线程间的协作,其中一部分线程(生产者)生成数据,另一部分线程(消费者)消费这些数据。 生产者-消费者模型的核心在于共享资源...

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

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

    java实现多线程经典模型生产者消费

    java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现...

    java多线程实现生产者消费者问题

    用java多线程,实现生产者消费者同步和互斥的问题,操作系统中的经典问题

    java多线程经典模型生产者消费者

    java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型...

    多线程简易实现生产者消费者模式

    总之,生产者消费者模式是多线程编程中的一种重要设计模式,它通过信号量和条件变量实现了线程间的同步和通信,有效提高了系统资源的利用率和整体效率。在Java中,我们可以借助并发库轻松实现这一模式,使得代码更加...

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

    总之,Java中的生产者-消费者模式是多线程编程中解决数据共享和同步问题的有效手段,通过合理利用`BlockingQueue`等并发工具类,我们可以构建高效、稳定的多线程应用。在开发过程中,了解和掌握这种模式有助于提高...

    java多线程实现生产者消费者关系

    在实际应用中,我们常常会遇到一种典型的多线程问题——生产者消费者模型。这个模型描述了两种类型的线程:生产者线程负责创建或生产资源,而消费者线程则负责消耗这些资源。在Java中,我们可以利用同步机制来实现...

    JAVA实现线程间同步与互斥生产者消费者问题

    在`JThreadSynch`这个压缩包文件中,我们可以预见到包含的Java源代码将展示以上的一种或多种机制,通过具体的示例代码来解释和实现生产者消费者问题的线程同步和互斥。通过学习和理解这个示例,开发者可以更好地掌握...

    操作系统:多线程处理生产者消费者,java实现

    基本满足操作系统课上要求,java实现的生产者消费者模型。

    java多线程(生产者与消费者)

    4. **阻塞队列(BlockingQueue)**:Java并发包(java.util.concurrent)中的阻塞队列是实现生产者消费者模式的理想选择。它们在内部已经处理了线程同步和等待,提供了一种高效且安全的共享数据方式。例如,`put()`...

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

    Java多线程编程是开发高并发、高性能应用的关键技术之一,而生产者消费者模式是多线程编程中常用的一种设计模式。它通过分离数据的生产和消费过程,实现了线程间的协同工作,有效避免了资源的竞争和浪费。在这个模式...

    java 多线程 生产者消费者模式源码

    java 多线程 生产者消费者模式,多个生产者对多个消费者,使用jdk 线程池及 BlockingQueue实现,解决了待生产的任务生产完成后,正常终止所有线程,避免线程(特别是消费者线程)因阻塞而无限等待的情况。源码中还简单...

    java 多线程生产者消费者模型demo

    Java多线程生产者消费者模型是一种典型的线程协作模式,用于解决并发编程中资源的高效利用和同步问题。在这个模型中,"生产者"线程负责生成数据,而"消费者"线程则负责处理这些数据。为了实现这种模式,Java提供了...

    JAVA多线程实现生产者消费者的实例详解

    JAVA多线程实现生产者消费者的实例详解 JAVA多线程实现生产者消费者是指在JAVA编程语言中使用多线程技术来实现生产者消费者模型的实例详解。生产者消费者模型是指在计算机科学中的一种经典模式,描述了生产者和消费...

    java多线程生产者与消费者案例

    关于java多线程的东西,里面有生产者与消费者的案例,感兴趣的朋友看一下吧。

    java多线程生产者消费者问题示例

    java多线程学习,生产者消费者问题示例

    由生产者/消费者问题看JAVA多线程

    ### 由生产者/消费者问题深入理解JAVA多线程 #### 生产者/消费者问题概述 生产者/消费者问题是一个经典的计算机科学问题,用于展示进程间的通信与同步问题。在这个模型中,生产者负责创建数据并将其放置到共享内存...

Global site tag (gtag.js) - Google Analytics