自分では解決できない 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()ロールのようです。