ScheduledThreadPoolExecutor не ожидает завершения TimerTask - PullRequest
0 голосов
/ 23 ноября 2018

Мне нужно решить проблему Java, которую я не могу решить самостоятельно.

У меня есть базовый класс и тестовый класс:

public class Appender extends SMTPAppender{

   private ScheduledThreadPoolExecutor scheduledThreadPoolExecutor = new    ScheduledThreadPoolExecutor(1);

   private final class MyTask extends TimerTask{
      @Override
      public void run(){
         //some code
         append(myEvent)
      }
   }

   @Override
   protected void append(ILoggingEvent event){
      //some code
      scheduledThreadPoolExecutor.schedule(task, cacheSize,    TimeUnit.MILLISECONDS);
   }

   @Override
   public synchronized void stop(){
      super.stop()
      scheduledThreadPoolExecutor.shutdown();
      scheduledThreadPoolExecutor.awaitTermination(cacheSize,    TimeUnit.MILLISECONDS);
   }

}

   public class AppenderTest {

       @Test
       public void myTest(){
          Appender appender = new Appender();

          methodWhichLogSomeLog(); // will call appender.append()

          appender.stop();

          //some test code
       }

    }

Я жду, что мой appender.stop () с переопределением должен ждать моего ScheduledThreadPoolExecutor и его запланированного TimerTask .

На самом деле, мой appender.stop () не ждет этого запланированного задания, и я не знаюЗачем.Кажется, это роль awaitTermination () .

...