@Override
	public E get() 
	{
		// double checking
		if (value == null) 
		{
			synchronized (this) 
			{
				if (value == null) 
				{
					try {
						this.wait();
					} catch (InterruptedException e) {
					}
				}
			}
		}
		return value;
	}