code: public void stopThread(StoppableThreadCache threadCache)
    {
      if (tc.isEntryEnabled())
        SibTr.entry(tc, "stopThread", threadCache);
      
      synchronized (_messageProcessor.getDestinationManager().deletionThreadLock)
      {    
        // Allow the thread to finish the immediate job in hand before
        // returning.
        //set the thread to stopping, so that it'll stop if in progress
        // and no new instances will be started         
        setStopping();
    
        // Now wait till the thread's gone
        while (isRunning())
        {
          try
          {
            // wait for thread to end
            // I put a timeout on this - to handle the case where we've hung
            // in delete processing. The best thing in such a case is probably
            // to allow the whole process to exit.
    
            // But is 5 secs right? - NY
            _messageProcessor.getDestinationManager().deletionThreadLock.wait(5000);
            if (Thread.holdsLock(asynchLock)) asynchLock.wait(5000);
          }
          catch (InterruptedException iex)
          {
            // No FFDC code needed
            SibTr.exception(tc, iex);
          }
        }
      }
      
      // Remove this thread from the thread cache
      threadCache.deregisterThread(this);
     
      if (tc.isEntryEnabled())
        SibTr.exit(tc, "stopThread");
    }
docs: Stop this messaging engines asynchronous deletion thread.
  <p>
  Feature 183052