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