[Seasar-user:18097] Re: [S2Chronos]タスクの一時停止

Junichi Kato [E-MAIL ADDRESS DELETED]
2009年 7月 29日 (水) 17:23:55 JST


金成さん
加藤です。

public synchronized void doExecute() {
	System.out.println("ATask実行 : ");
	pause.set( ! pause.get() );
	this.notify();
}

とするとうまくいくと思うんですが、どうでしょうか。
よろしくお願いします。

2009/07/29 10:25 に kanari takuma<[E-MAIL ADDRESS DELETED]> さんは書きました:
> 加藤さん
> 金成です。
> ご回答ありがとうございます。
> 早速ですが、
> 昨日ご指摘頂いた実装方法で、動作確認を行いましたので、報告致します。
> 以下、使用したクラスの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まで操作するのは、
> あまりスマートなやり方ではないのでしょうか。)
> 実行方法に問題点等ございましたら、ご指摘下さい。
> 宜しくお願い致します。
>
>
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
>
>



-- 
/**
 * name  : Junichi Kato
 * email : [E-MAIL ADDRESS DELETED]
 *
 * blog  : http://d.hatena.ne.jp/j5ik2o/
 *
 * commiting projects :
 * http://jiemamy.org/
 * http://s2chronos.sandbox.seasar.org/
 * http://s2config.sandbox.seasar.org/
 */


Seasar-user メーリングリストの案内