[Seasar-user:18093] Re: [S2Chronos]タスクの一時停止
kanari takuma
[E-MAIL ADDRESS DELETED]
2009年 7月 29日 (水) 10:25:19 JST
加藤さん
金成です。
ご回答ありがとうございます。
早速ですが、
昨日ご指摘頂いた実装方法で、動作確認を行いましたので、報告致します。
以下、使用したクラスのdoExecute部分です。
・ATask(CRON)
public BTask bTask;
private AtomicBoolean pause = new AtomicBoolean();
-- 中略 --
public void doExecute() {
System.out.println("ATask実行 : ");
pause.set( ! pause.get() );
this.notify();
}
(AbstractPausableTask内でpauseがnullになってしまうため、
ATaskのpauseの宣言を、private AtomicBoolean pause;
→ private AtomicBoolean pause = new AtomicBoolean();
に変更して、AbstractPausableTask.setPauseを呼び出すように修正しました。)
・BTask(NonDelayTrigger)
public void doExecute() {
int count = 0;
while(count++ < 9000000) {
System.out.println("BTask実行中 : " + count);
waitProcess();
}
}
・AbstractPausableTaskに変更はありません。
このタスクを実行した結果、
ATask.doExuceteでの、notifyを呼び出し時に、
IllegalMonitorStateExceptionが発生します。
スレッド的に良くないと思うのですが、
notifyを呼ばなければ、正常に一時停止、再開が可能でした。
(例えば、AbstractPausableTask内で、pauseObjectのnofityまで操作するのは、
あまりスマートなやり方ではないのでしょうか。)
実行方法に問題点等ございましたら、ご指摘下さい。
宜しくお願い致します。
-------------- next part --------------
HTMLの添付ファイルを保管しました...
URL: <http://ml.seasar.org/archives/seasar-user/attachments/20090729/6d07bb38/attachment.html>
Seasar-user メーリングリストの案内