zoukankan      html  css  js  c++  java
  • 生产者消费者阻塞队列

    package html;
    
    import java.util.LinkedList;
    import java.util.List;
    
    public class KF {
    
        public static void main(String[] args) {
            BlockList list = new BlockList(10);
            new Thread(new Productor(list)).start();
            new Thread(new Consumer(list)).start();
        }
    
        static class Productor implements Runnable {
            BlockList list;
    
            public Productor(BlockList list) {
                this.list = list;
            }
    
            @Override
            public void run() {
                int i = 0;
                while (true) {
                    System.err.println("put:" + i);
                    list.put(i++);
                }
            }
        }
    
        static class Consumer implements Runnable {
            BlockList list;
    
            public Consumer(BlockList list) {
                this.list = list;
            }
    
            @Override
            public void run() {
                while (true) {
                    Object obj = list.get();
                    System.err.println("get:" + obj);
                }
            }
        }
    }
    
    class BlockList {
        List<Object> list;
        int capacity;
    
        public BlockList(int capacity) {
            this.capacity = capacity;
            list = new LinkedList<>();
        }
    
        public boolean put(Object obj) {
            synchronized (list) {
                while (list.size() >= capacity) {
                    try {
                        list.wait();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
                list.add(obj);
                list.notifyAll();
            }
    
            return false;
        }
    
        public Object get() {
            Object obj = null;
            synchronized (list) {
                while (list.isEmpty()) {
                    try {
                        list.wait();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
    
                obj = list.remove(0);
                list.notifyAll();
            }
            return obj;
        }
    
    }
  • 相关阅读:
    使用kubeadm部署K8S v1.17.0集群
    06Shell并发控制
    05Shell循环语句
    04Shell流程控制
    03Shell条件测试
    02Shell变量
    01Shell入门02-echo和printf
    01Shell入门01-bash Shell特性
    局域网部署ntp时间服务器
    聊聊、Mybatis集成Spring XML方式
  • 原文地址:https://www.cnblogs.com/jpit/p/7404557.html
Copyright © 2011-2022 走看看