@Override
	public E poll() 
	{
		E item = queue.poll();
		if (blocking && item == null) {
			synchronized (lock) {
				// Only block if the item is null, else return it.
				item = queue.poll();
				if (item == null) {
					try {
						lock.wait(timeout);
					} catch (InterruptedException e) { }
					item = queue.poll();
				}
			}
		}
		return item;
	}