BlockingQueue Implemetation using ReentrantLock
These seem mixed up:

    while(queue.size() == limit.get()) {
        put_condition.await();
    }
    put_condition.signal();


and

    while (queue.size() == 0) {
        take_condition.await();
    }
    take_condition.signal();


when putting if queue is full you wait until someone takes 
and when taking if queue is empty you wait until someone puts.

You should have test cases with 11 puts followed by 1 take.
and 1 take followed by 1 put. To see they do not deadlock.

What do you know, the example code for Condition is actually Bounded buffer. And you can see it here:
http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/locks/Condition.html

But I like their condition names better;)

Limit is a constant as it is, hence does not need atomic integer or any other synchronization. Just declare it final. best way of making something threadsafe is to make it immutable.