zoukankan      html  css  js  c++  java
  • BlockQueue

    import java.util.*;
    import java.util.concurrent.locks.Condition;
    import java.util.concurrent.locks.Lock;
    import java.util.concurrent.locks.ReentrantLock;
    
    
    public class BlockQueue<T> {
    	public int capacity;
    	public Queue<T> queue;
    	final Lock lock = new ReentrantLock();
    	final Condition notFull = lock.newCondition();
    	final Condition notEmpty = lock.newCondition();
    	
    	public BlockQueue(int limit) {
    		this.capacity = limit;
    		this.queue = new LinkedList<>();
    	}
    	
    	public void put(T data) throws InterruptedException {
    		lock.lock();
    		try {
    			while (queue.size() == capacity) {
    				notFull.await();
    			}
    			queue.offer(data);
    			notEmpty.signal();
    		} finally {
    			lock.unlock();
    		}
    	}
    	
    	public T get() throws InterruptedException {
    		lock.lock();
    		try {
    			while (queue.size() == 0) {
    				notEmpty.await();
    			}
    			T data = queue.poll();
    			notFull.signal();
    			return data;
    		} finally {
    			lock.unlock();
    		}
    	}
    	
    	public static void main(String[] args) {
    
    		
    	}
    	
    	
    }
    

      

  • 相关阅读:
    #define #undef
    ps
    Find–atime –ctime –mtime的用法与区别总结
    redis
    linux mutex
    private继承
    boost::noncopyable介绍
    Makefile 中:= ?= += =的区别
    linux Tar 命令参数详解
    Ubuntu14.04安装CMake3.0.2
  • 原文地址:https://www.cnblogs.com/apanda009/p/7960557.html
Copyright © 2011-2022 走看看