人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

java のスレッドについて

javaでスレッドを作って処理をさせたいと思います。

メインのクラスでスレッドAを呼び出し、スレッドAで計算をしてその結果をメインのクラスで利用したい場合、一番簡単な方法は何でしょうか?

なお、メインのクラスは、
while (Thread.isAlive());
な感じでスレッドが終わるまで処理を止めておきたいと思います。

簡単なコードを書いていただけないでしょうか?

●質問者: zachouR
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● a-kuma3
●50ポイント

スレッドのインスタンスに計算結果を抱えておいて、ゲッターメソッドで取得するのが簡単だと思います。

public class Hatena {

 static class MyThread extends Thread {
 private String answer_;
 public String getAnswer() {
 return answer_;
 }

 public void run() {

 /* 時間がかかる計算 */
 try {
 Thread.sleep(5000);
 } catch (InterruptedException e) {
 System.out.println(e);
 }

 answer_ = "hatena";
 }
 }

 public static void main(String[] args) {
 try {
 MyThread th = new MyThread();

 /* 計算開始 */
 th.start();

 /* 計算終了を待ち合わせ */
 th.join();

 /* 計算結果を取得 */
 System.out.println("answer = " + th.getAnswer());

 } catch (InterruptedException e) {
 System.out.println(e);
 }

 }
}


後、スレッドの処理を待ち合わせるのに、こんなことをしては駄目です。

while (Thread.isAlive());

こっちのループで CPU を食ってしまう。
Thread#join() で待ち合わせてください。


zachouRさんのコメント
ありがとうございます、さっそく組み込みました! 待ちも Thread#join() に切り替えました。

2 ● kenichiice
●50ポイント

java.util.concurrent.ExecutorService の submit() を使うのがいいと思ったのですがどうでしょうか。

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

public class Hatena {
 public static void main(String[] args) {
 try {
 ExecutorService executor = Executors.newSingleThreadExecutor();
 Future<String> f = executor.submit(new Callable<String>() {
 @Override
 public String call() throws Exception {
 /* 時間がかかる計算 */
 Thread.sleep(5000);
 return "hatena";
 }
 });
 
 /* 計算結果を取得 */
 System.out.println("answer = " + f.get());

 executor.shutdown();
 } catch (InterruptedException | ExecutionException e) {
 System.out.println(e);
 }
 }
}

zachouRさんのコメント
Future も調べてみたのですが、いまいち使い方がわからず、でもこれも使いやすいですね、 ありがとうございます、
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ