code: synchronized Object getValue() {
          while (value == NULL) {
              try {
                  wait();
              } catch (InterruptedException ex) {
                  throw new RuntimeException(ex);
              }
          }
          return value;
      }
docs: Get the value object. This call blocks the caller until
  a value is set (!=null).
  
  @return the value