public K remove()
	{
		K itemRemoved = null;
		
		synchronized (mLock)
		{
			while(mQueue.size() <= 0)
			{
				try
				{
					mLock.wait();
				} 
				catch (InterruptedException e)
				{
					e.printStackTrace();
				}
			}
			
			mQueueFront = (mQueueFront + 1)% mQueueCapacity;
			// Add item to queue
			itemRemoved = mQueue.remove(mQueueFront);
			// Update other threads waiting for stuff
			mLock.notify();
			System.out.println("# Thread-'" + Thread.currentThread().getName() + "' Removed item " + itemRemoved.toString() + " from queue.");
		}
		
		return itemRemoved;
	}