zoukankan      html  css  js  c++  java
  • java生产者消费者实例

    import java.util.Queue;
    import java.util.LinkedList;
    public class ProducerConsumerDemo {
    public static void main(String[] args) {
    MyQueue q = new MyQueue();
    Producer p = new Producer(q);
    Consumer c = new Consumer(q);
    p.start();
    c.start();
    }
    }
    class Producer extends Thread {
    MyQueue q = new MyQueue();
    Producer(MyQueue q) {
    this.q = q;
    }
    public void run() {
    int i = 0;
    while (true) {
    q.push(i);
    try {
    notify();
    } catch (Exception e) {}
    System.out.println("producer: " + i);
    i++;
    }
    }
    }
    class Consumer extends Thread {
    MyQueue q = new MyQueue();
    Consumer(MyQueue q) {
    this.q = q;
    }
    public void run() {
    while (true) {
    if (q.size() > 0) {
    System.out.println("consumer: " + q.pop());
    } else {
    try {
    wait();
    } catch (Exception e) {}
    }
    }
    }
    }
    class MyQueue {
    Queue queue = new LinkedList();
    synchronized void push(Object obj) {
    queue.offer(obj);
    }
    synchronized Object pop() {
    return queue.poll();
    }
    long size() {
    return queue.size();
    }
    }

    另外一个实例

    package com.zzz.lcy.dm;
    
    import java.util.LinkedList;
    import java.util.concurrent.locks.Condition;
    import java.util.concurrent.locks.Lock;
    import java.util.concurrent.locks.ReentrantLock;
    
    public class TestDataQueue {
        private LinkedList<TestData> queue = new LinkedList<TestData>();
        private int maxsize = 999;
        
        private Lock lock = new ReentrantLock();
        private Condition full = lock.newCondition();
        private Condition empty = lock.newCondition();
        
        public void put(TestData data) {
            lock.lock();
            while (queue.size() == maxsize) {
                try {
                    full.await();
                } catch (InterruptedException e) {
                    lock.unlock();
                }
            }
            queue.offer(data);
            empty.signal();
            lock.unlock();
        }
        
        public TestData pop() {
            lock.lock();
            while (queue.size() == 0) {
                try {
                    empty.await();
                } catch (InterruptedException e) {
                    lock.unlock();
                }
            }
            TestData data = queue.poll();
            full.signal();
            lock.unlock();
            return data;
        }
    
        public static void main(String[] args) {
            final TestDataQueue q = new TestDataQueue();
            new Thread() {
                public void run() {
                    while (true) {
                        q.pop();
                        System.out.println("pop");
                    }
                }
            }.start();
            new Thread() {
                public void run() {
                    while (true) {
                        q.put(null);
                        try {
                            sleep(1000);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                }
            }.start();
        }
    }

     再来一个

    import java.util.concurrent.ArrayBlockingQueue;
    
    public class TestDataQueue {
        private ArrayBlockingQueue<TestData> queue;
    
        public TestDataQueue(int size) {
            queue = new ArrayBlockingQueue<TestData>(size);
        }
        
        public TestDataQueue() {
            queue = new ArrayBlockingQueue<TestData>(8888);
        }
    
        public ArrayBlockingQueue<TestData> getQueue() {
            return queue;
        }
    
        public void setQueue(ArrayBlockingQueue<TestData> queue) {
            this.queue = queue;
        }
        
        public void put(TestData data) {
            try {
                queue.put(data);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        
        public TestData pop() {
            try {
                return queue.take();
            } catch (InterruptedException e) {
                e.printStackTrace();
                return null;
            }
        }
    }
  • 相关阅读:
    补发《超级迷宫》站立会议九
    补发《超级迷宫》站立会议八
    补发《超级迷宫》站立会议七
    补发《超级迷宫》站立会议六
    一周开发项目
    所学的内容
    开发项目和所用时间 感想
    自我介绍
    大容量数据转移操作命令——BULK INSERT(类似于BCP)
    字符编码与文件处理
  • 原文地址:https://www.cnblogs.com/feilv/p/4213880.html
Copyright © 2011-2022 走看看