スレッド操作からの戻り値
マルチスレッド プログラミングでは、多くの場合、スレッド間の対話でデータの交換が必要になります。一般的なシナリオの 1 つは、別のスレッド内で実行された操作の結果を取得しようとすることです。
以下のコード例を考えてみましょう。
public void test() {
Thread uiThread = new HandlerThread("UIHandler") {
public synchronized void run() {
int value = 2; // To be returned to test()
}
};
uiThread.start();
}
この例では、値は別のスレッド (この場合は「UIHandler」) 内で変更されます。課題は、変更されたデータを取得する必要がある呼び出し側メソッドにこの値を返すことです。
オブジェクトの状態の利用
この問題に対する 1 つのアプローチは、次の方法を使用することです。オブジェクトの状態を調べて、必要なデータを保存および取得します。たとえば、Runnable インターフェイスを実装するカスタム クラスを作成し、スレッドとして実行できるようにすることができます。このクラス内に、スレッドによって計算された値を格納するフィールドを含めることができます。
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(); // Retrieve the modified value
主な考慮事項
スレッドはネイティブに値を返さないことに注意することが重要です。通常のクラスと同様にスレッドを参照し、getValue() などのメソッドを使用してその値を要求することで、このギャップを埋めることができます。さらに、データ競合状態を防止し、スレッドの安全性を維持するために、同期メカニズムを確保する必要があります。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3