code: synchronized void scheduleNext()
      {
          // Synchronized to insure a destroyed or cancelled (ivTaskHanler=null)
          // timer is not re-scheduled. If the timer is in the cancelled state
          // but not yet destroyed, then nothing should be done with it here
          // as the canceling thread will either destroy it or rollback and
          // and call schedule to re-create the task handler.              RTC107334
  
          if (!ivDestroyed)
          {
              if (ivExpiration != 0)
              {
                  if (ivTaskHandler != null)
                  {
                      ivTaskHandler.scheduleNext(ivExpiration);
                  }
                  else
                  {
                      if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
                          Tr.debug(tc, "scheduleNext: not scheduled, timer in cancelled state : " + ivTaskId);
                  }
              }
              else
              {
                  remove(true); // permanently remove the timer since it will never expire again
              }
          }
      }
docs: Called by the TimerTaskHandler after successfully completing a timer
  expiration to schedule the next expiration. The timer will be cancelled
  if there are no further expirations. <p>
  
  {@link #calculateNextExpiration()} must be called prior to this method
  or the timer will not be scheduled properly. <p>