スレッドプール周りの話に行く前に,初期化と破棄処理のお話をしておかないとまずいw.
initializeとdestroyという名のメソッドを定義してください.そうするとS2Chronosのスケジューラによって登録された後に,スケジューラがタスクを順番に検索します.その検索時に最初に一度だけinitializeメソッドが実行されます.
そして,破棄メソッドですが,タスククラスのdoExecuteメソッドが終了したら,スケジューラ内部でのタスクの状態管理が実行済みに遷移し,その後一定間隔でスケジューラのキューから削除されます.その削除前に一度だけdestroyメソッドが呼ばれます.(GC的な破棄という意味ではないので誤解なきよう)ただし,destroyメソッドはタスククラスがisReScheduleTaskをtrueで返すか,タスククラスが返すトリガーがisReScheduleTaskをtrueで返す場合は,destroyメソッドは呼ばれません.isReScheduleTaskがtrueの場合は永遠に終わりの来ないタスクという意味合いになります.注意してください.標準では@CronTrigger, CCronTriggerはisReScheduleTaskをtrueで返しますので,destroyメソッドを定義していても呼ばれません.
このあたりも,Teedaをマネて作っているので規約ベースなんですが,今後はT2のようにアノテーションで好きな名前を指定できるようにしたいと思いますw
@Task @NonDelayTrigger public class SampleTask { private static Logger log = Logger.getLogger(SampleTask .class); public void initialize(){ log.info(this.getClass().getSimpleName() + ":initialize"); } public void doExecute(){ log.info(this.getClass().getSimpleName() + ":doExecute"); } public void destroy(){ log.info(this.getClass().getSimpleName() + ":destroy"); } }