code: public T get() throws E {
  		// use a temporary variable to reduce the number of reads of the volatile field
  		// see commons-lang3
  		T result = object;
  		if (object == null) {
  			synchronized (this) {
  				result = object;
  				if (object == null) {
  					object = result = initializer.get();
  				}
  			}
  		}
  		return result;
  	}
docs: Create or get the instance.
  
  @return the instance
  @throws E exception thrown by initializer