Implementations similar to the Java blocking queue:
Public classBlockingqueue {PrivateList queue =NewLinkedList (); Private intLimit = 10;//Buffer size PublicBlockingqueue (intlimit) { This. Limit =limit; } Public synchronized voidEnqueue (Object Item)throwsinterruptedexception { while( This. queue.size () = = This. Limit) {Wait (); } if( This. queue.size () = = 0) {notifyall (); } This. Queue.add (item); } Public synchronizedObject dequeue ()throwsinterruptedexception{ while( This. queue.size () = = 0) {wait (); } if( This. queue.size () = = This. Limit) {Notifyall (); } return This. Queue.remove (0); }}
It must be noted that the Notifyall method is called only when the size of the queue equals the upper limit (limit) or the lower bound (0) within the Enqueue and Dequeue methods. If the size of the queue is neither equal to the upper bound nor equal to the lower limit, any thread that calls the Enqueue or Dequeue method does not block and can add or remove elements to the queue normally.
Java implementation of producer/consumer issues