@Override public final boolean toKeepaliveStart(){
  KeepaliveState oldState;
  KeepaliveState newState;
  do {
    oldState=_state.get();
    if (oldState.isAvailable()) {
      return false;
    }
    newState=oldState.toKeepalive();
  }
 while (!_state.compareAndSet(oldState,newState));
  return true;
}

@ Override public final boolean toKeepaliveStart ( ) { KeepaliveState oldState ; KeepaliveState newState ; do { oldState = _state . get ( ) ; if ( oldState . isAvailable ( ) ) { return false ; } newState = oldState . toKeepalive ( ) ; } while ( ! _state . compareAndSet ( oldState , newState ) ) ; return true ; }
change to keepalive , unless data is available .
