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;
        }
    
    }
  • 相关阅读:
    单选、复选框控制表格行高亮 JQuery
    java内存泄露处理的方法
    spring几种Dao支持配置
    遇见你,是我最美丽的意外
    JavaClassLoader的一些热运用
    CSS Sprites 图片整合技术
    关于前端工程师与其他岗位协作的想法
    JAVA断言使用
    dreamover 模板
    javascriptdom学习笔记
  • 原文地址:https://www.cnblogs.com/jpit/p/7404557.html
Copyright © 2011-2022 走看看