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;
        }
    
    }
  • 相关阅读:
    JavaOOP对象和封装
    使用socket实现文件复制
    多线程模拟银行取款
    初入多线程示例展示--Runner
    初步学习多线程3
    初步学习多线程2
    初步线程学习1
    守护线程_setDaemon()
    多线程_yield()和sleep()方法比较
    java_多线程_优先级
  • 原文地址:https://www.cnblogs.com/jpit/p/7404557.html
Copyright © 2011-2022 走看看