問題は、Executors.newSingleThreadScheduledExecutor();実際には を返さないことScheduledThreadPoolExecutorです。
Executorsクラスのソース コード:
public static ScheduledExecutorService newSingleThreadScheduledExecutor() {
return new DelegatedScheduledExecutorService
(new ScheduledThreadPoolExecutor(1));
}
Delegated...クラス ( もありますDelegatedExecutorService) は、すべての呼び出しを基礎となるエグゼキューター (ScheduledThreadPoolExecutorこの場合は ) に渡しているだけです。コード内のコメントは、これらのクラスの全体的なポイントが、基になるエグゼキューターが持つ可能性のあるすべての非インターフェイス メソッドを非表示にすることであることを示唆しています。
いずれにせよ、作業中のオブジェクトのクラス バージョンではなく、インターフェイスを使用することをお勧めします ( and Listnotおよび not )。ArrayListScheduledExecutorServiceScheduledThreadPoolExecutor
ScheduledThreadPoolExecutorで利用できる機能と で利用できない機能が絶対に必要な場合はScheduledExecutorService、 のコンストラクタを使用ScheduledThreadPoolExecutorしてそのインスタンスを作成できます。