I was writing my own implementation of BlockingQueue for practice. I am trying to avoid using the synchronized keyword for the methods. I would instead like to use ReentrantLock.What is the best way to write this implementation? I am not a Java ninja and would greatly appreciate if someone could pinpoint the errors in my code here and suggest better ways of implementing it.public class MyBlockingQueue<T> {private Queue<T> queue;private AtomicInteger limit = new AtomicInteger(10);private Lock put_lock = new ReentrantLock();private Lock take_lock = new ReentrantLock();private Condition put_condition = put_lock.newCondition();private Condition take_condition = take_lock.newCondition();public MyBlockingQueue(AtomicInteger limit){    queue = new LinkedList<T>();    this.limit = limit;}public boolean put(T item) throws InterruptedException{    put_lock.lockInterruptibly();    try {        while(queue.size() == limit.get()) {            put_condition.await();        }        put_condition.signal();        queue.add(item);    } finally{        put_lock.unlock();    }    return true;}public T take() throws InterruptedException{    take_lock.lockInterruptibly();    try {        while (queue.size() == 0) {            take_condition.await();        }        take_condition.signal();        return queue.poll();    } finally {        take_lock.unlock();    }}
BlockingQueue Implemetation using ReentrantLock
java;thread safety