ScheduledThreadPoolExecutor不等待TimerTask终止

时间:2018-11-23 15:08:15

标签: java timertask scheduledexecutorservice

我必须解决一个我自己无法解决的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() 角色。

0 个答案:

没有答案