Мне нужно решить проблему 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 () .