Class Lifecycle


  • public class Lifecycle
    extends java.lang.Object
    Lifecycle state. Allows the following transitions:
    • INITIALIZED -> STARTED, STOPPED, CLOSED
    • STARTED -> STOPPED
    • STOPPED -> STARTED, CLOSED
    • CLOSED ->

    Also allows to stay in the same state. For example, when calling stop on a component, the following logic can be applied:

     public void stop() {
      if (!lifecycleState.moveToStopped()) {
          return;
      }
     // continue with stop logic
     }
     

    NOTE: The Lifecycle class is thread-safe. It is also possible to prevent concurrent state transitions by locking on the Lifecycle object itself. This is typically useful when chaining multiple transitions.

    Note, closed is only allowed to be called when stopped, so make sure to stop the component first. Here is how the logic can be applied. A lock of the lifecycleState object is taken so that another thread cannot move the state from STOPPED to STARTED before it has moved to CLOSED.

     public void close() {
      synchronized (lifecycleState) {
          if (lifecycleState.started()) {
              stop();
          }
          if (!lifecycleState.moveToClosed()) {
              return;
          }
      }
      // perform close logic here
     }
     
    • Constructor Detail

      • Lifecycle

        public Lifecycle()
    • Method Detail

      • initialized

        public boolean initialized()
        Returns true if the state is initialized.
      • started

        public boolean started()
        Returns true if the state is started.
      • stopped

        public boolean stopped()
        Returns true if the state is stopped.
      • closed

        public boolean closed()
        Returns true if the state is closed.
      • stoppedOrClosed

        public boolean stoppedOrClosed()
      • canMoveToStarted

        public boolean canMoveToStarted()
                                 throws java.lang.IllegalStateException
        Throws:
        java.lang.IllegalStateException
      • moveToStarted

        public boolean moveToStarted()
                              throws java.lang.IllegalStateException
        Throws:
        java.lang.IllegalStateException
      • canMoveToStopped

        public boolean canMoveToStopped()
                                 throws java.lang.IllegalStateException
        Throws:
        java.lang.IllegalStateException
      • moveToStopped

        public boolean moveToStopped()
                              throws java.lang.IllegalStateException
        Throws:
        java.lang.IllegalStateException
      • canMoveToClosed

        public boolean canMoveToClosed()
                                throws java.lang.IllegalStateException
        Throws:
        java.lang.IllegalStateException
      • moveToClosed

        public boolean moveToClosed()
                             throws java.lang.IllegalStateException
        Throws:
        java.lang.IllegalStateException
      • toString

        public java.lang.String toString()
        Overrides:
        toString in class java.lang.Object