美文网首页
生产者消费者模型

生产者消费者模型

作者: 圣明 | 来源:发表于2021-12-27 14:22 被阅读0次

    基于Synchronized实现

    package com.wan.situ;
    
    import java.util.ArrayList;
    
    public class ThreadTest {
    
        public int maxSize;
        public final ArrayList<String> products = new ArrayList<>();
        public Worker worker;
        public Consumer consumer;
        public boolean isRun = false;
        private static int index;
    
        public synchronized String getNewIndex() {
            return (index++) + "";
        }
    
        public ThreadTest(int size) {
            this.maxSize = size;
            this.worker = new Worker();
            this.consumer = new Consumer();
        }
    
    
        public void start() {
            this.isRun = true;
            this.consumer.start();
            this.worker.start();
        }
    
        class Worker extends Thread {
            @Override
            public void run() {
                while (isRun) {
                    synchronized (products) {
                        if (products.size() < maxSize) {
                            try {
                                Thread.sleep(1000);
                                String p = getNewIndex();
                                products.add(p);
                                System.out.println("生产者 + " + p);
                                products.notify();
                            } catch (InterruptedException e) {
                                e.printStackTrace();
                            }
                        } else {
                            try {
                                System.out.println("生产者 - wait");
                                products.wait();
                            } catch (InterruptedException e) {
                                e.printStackTrace();
                            }
                        }
                    }
                }
            }
        }
    
        class Consumer extends Thread {
            @Override
            public void run() {
                while (isRun) {
                    synchronized (products) {
                        if (products.size() > 0) {
                            try {
                                Thread.sleep(1000);
                                System.out.println("消费者 - " + products.remove(0));
                                products.notify();
                            } catch (InterruptedException e) {
                                e.printStackTrace();
                            }
                        } else {
                            try {
                                System.out.println("消费者 - wait");
                                products.wait();
                            } catch (InterruptedException e) {
                                e.printStackTrace();
                            }
                        }
                    }
                }
            }
        }
    
        public static void main(String[] args) {
            new ThreadTest(10).start();
        }
    }
    
    
    消费者 - wait
    生产者 + 0
    生产者 + 1
    生产者 + 2
    生产者 + 3
    生产者 + 4
    生产者 + 5
    生产者 + 6
    生产者 + 7
    生产者 + 8
    生产者 + 9
    生产者 - wait
    消费者 - 0
    消费者 - 1
    消费者 - 2
    消费者 - 3
    消费者 - 4
    消费者 - 5
    消费者 - 6
    消费者 - 7
    

    相关文章

      网友评论

          本文标题:生产者消费者模型

          本文链接:https://www.haomeiwen.com/subject/wfsyqrtx.html