public synchronized T take() {
		while (first == null) {
			try {
				this.wait();
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
		T taken = first.val;
		first = first.next;
		return taken;
	}