Java完成生产者消费者模型

Posted 愤怒的绿萝

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java完成生产者消费者模型相关的知识,希望对你有一定的参考价值。

生产者和消费者模型,是多线程中的典型模型,这里使用Java完成该模型

ServerTest.java 生产者代码

package com.orange.threadmodel;

import java.util.Queue;

public class ServerTest implements Runnable{

    private Queue<String> queue;
    
    public ServerTest(Queue<String> queue){
        this.queue = queue;
    }
        
    @Override
    public void run() {
        while(true){
            try{
                if(queue.size() < 10){
                    System.out.println("生成商品......");
                    queue.offer("String-->");
                    Thread.sleep(1000);
                }else{
                    System.out.println("无法生成商品,库存满了");
                    Thread.sleep(3000);
                }
            }catch(Exception e){
                e.printStackTrace();
            }
        }
    }        
}

ClientTest.java 消费者代码

package com.orange.threadmodel;

import java.util.Queue;

public class ClientTest implements Runnable{

    private Queue<String> queue;
    
    public ClientTest(Queue<String> queue){
        this.queue = queue;
    }
    
    @Override
    public void run() {
            while(true){
                try{
                    if(queue.isEmpty()){
                        System.out.println("商品消费完了,无法再消费......");
                        Thread.sleep(10000);
                    }else{
                        System.out.println("消费商品......");
                        queue.poll();
                        Thread.sleep(20000);
                    }
                }catch(Exception e){
                    e.printStackTrace();
                }
            }
        }
}

ModelClient.java 测试模型代码

package com.orange.threadmodel;

import java.util.Queue;
import java.util.concurrent.ArrayBlockingQueue;

public class ModelClient {

    private static Queue<String> queue = new ArrayBlockingQueue<String>(10);
    
    public static void main(String[] args){
        ServerTest st = new ServerTest(queue);
        ClientTest ct = new ClientTest(queue);
        Thread t1 = new Thread(st);
        Thread t2 = new Thread(ct);
        t1.start();
        t2.start();
    }
    
}

测试结果:

 

以上是关于Java完成生产者消费者模型的主要内容,如果未能解决你的问题,请参考以下文章

转: Java并发编程之十三:生产者—消费者模型(含代码)

生产者消费者模型-Java代码实现

Java多线程:生产者消费者模型

[Java并发编程实战] 阻塞队列 BlockingQueue(含代码,生产者-消费者模型)

Java 阻塞队列

Java 阻塞队列