[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 メーリングリストの案内