- PR -

スレッドの戻り値の取り方について

1
投稿者投稿内容
ebi
会議室デビュー日: 2007/08/21
投稿数: 7
投稿日時: 2007-08-21 01:20
こんにちわ。
スレッドのプログラムを作っているのですが、
戻り値を取ろうとした所で詰まっています。
リファレンスで調べてみたのですが、
戻り値を取るようなメソッドが見つけられなかったので質問させて頂きます。
よろしくお願いします。

参考までに、下記のような感じでやっています。

class MyThread implements Runnable {
public void run() {
if( 条件 ) {
戻り値(1)
}
戻り値(0)
}
}

class Main {
public static void main(String[] args) {
MyThread myThread = new MyThread();

Thread thread = new Thread( myThread );

// スレッドの開始
thread.start();

// スレッドの終了迄待機
thread.join();

// threadの戻り値で以降の処理が分岐
}
}
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2007-08-21 02:24
作られたスレッドにフィールドを用意して、そのフィールドをスレッドの作成側で参照してみては?

JDK5ならFutureオブジェクトもあります。
http://www.techscore.com/tech/J2SE/Thread/8-3.html
nagise
ぬし
会議室デビュー日: 2006/05/19
投稿数: 1141
投稿日時: 2007-08-21 09:41
戻り値を取ろうとする場合、メインのスレッドから結果を取得する際に
ブロックすることになるので、結構面倒だったりします。
ただ値を返したいだけなのにいろいろと同期取る必要が出ますし。

比較的同期が楽なのはObserverパターンにして非同期に結果を返す手法。
結果が取れた時点で通知するのでブロックせずに済みますが、
このあたりの使い分けは要件によって採否がわかれるところです。

かつのりさんが紹介していますがFutureを使った処理は
これはこれで関連するクラスをいろいろ準備しないといけないので
最初は敷居が高いと感じるでしょうが、慣れれば便利ですね。
nagise
ぬし
会議室デビュー日: 2006/05/19
投稿数: 1141
投稿日時: 2007-08-21 15:09
blogの方でサンプルを書いてみました。
http://blogs.wankuma.com/nagise/archive/2007/08/21/91284.aspx
ebi
会議室デビュー日: 2007/08/21
投稿数: 7
投稿日時: 2007-08-22 01:13
今回はスレッドの方にメンバ変数を用意して、参照元でjoin後にそこを見るようにしようと思います。

Futureオブジェクトやsynchronizedはこれから調べて使うようにしようと思います。
blogのサンプルも参考にさせて頂きます。

レスありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)