public T init(Callable<T> c) throws IgniteCheckedException {
  if (!finished) {
synchronized (mux) {
      if (!finished) {
        try {
          res=c.call();
        }
 catch (        Exception e) {
          this.e=e;
        }
 finally {
          finished=true;
          mux.notifyAll();
        }
      }
    }
  }
  if (e != null)   throw e instanceof IgniteCheckedException ? (IgniteCheckedException)e : new IgniteCheckedException(e);
  return res;
}

public T init ( Callable < T > c ) throws IgniteCheckedException { if ( ! finished ) { synchronized ( mux ) { if ( ! finished ) { try { res = c . call ( ) ; } catch ( Exception e ) { this . e = e ; } finally { finished = true ; mux . notifyAll ( ) ; } } } } if ( e != null ) throw e instanceof IgniteCheckedException ? ( IgniteCheckedException ) e : new IgniteCheckedException ( e ) ; return res ; }
executes initialization operation only once .
