1. ホーム
  2. java

[解決済み] スレッドからの戻り値

2022-11-04 22:30:39

質問

あるメソッドに HandlerThread . の中で値が変更されます。 Thread の中で値が変更され、それを test() メソッドに戻したいのです。このような方法はあるのでしょうか?

public void test()
{   
    Thread uiThread = new HandlerThread("UIHandler"){
        public synchronized void run(){
            int value; 
            value = 2; //To be returned to test()
        }
    };
    uiThread.start();
}

どのように解決するのですか?

通常は次のようにします。

 public class Foo implements Runnable {
     private volatile int value;

     @Override
     public void run() {
        value = 2;
     }

     public int getValue() {
         return value;
     }
 }

次に、スレッドを作成し、値を取得します(値が設定されていることが前提です)。

Foo foo = new Foo();
Thread thread = new Thread(foo);
thread.start();
thread.join();
int value = foo.getValue();


tl;dr スレッドは値を返すことができません(少なくともコールバックメカニズムがない限り)。通常のクラスのようにスレッドを参照し、値を要求する必要があります。