かとじゅんの技術日誌

技術の話をするところ

初期化と破棄処理について

スレッドプール周りの話に行く前に,初期化と破棄処理のお話をしておかないとまずい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");
	}
}