スレッド操作からの戻り値
マルチスレッド プログラミングでは、多くの場合、スレッド間の対話でデータの交換が必要になります。一般的なシナリオの 1 つは、別のスレッド内で実行された操作の結果を取得しようとすることです。
以下のコード例を考えてみましょう:
<code class="java">public void test() { Thread uiThread = new HandlerThread("UIHandler") { public synchronized void run() { int value = 2; // To be returned to test() } }; uiThread.start(); }</code>
この例では、値は別のスレッド内で変更されます。スレッド (この場合は「UIHandler」)。課題は、変更されたデータを取得する必要がある呼び出し側メソッドにこの値を返すことです。
オブジェクトの状態の活用
この問題に対する 1 つのアプローチは、次の方法を使用することです。オブジェクトの状態を調べて、必要なデータを保存および取得します。たとえば、Runnable インターフェイスを実装するカスタム クラスを作成し、スレッドとして実行できるようにすることができます。このクラス内に、スレッドによって計算された値を格納するフィールドを含めることができます。
<code class="java">public class Foo implements Runnable { private volatile int value; @Override public void run() { value = 2; } public int getValue() { return value; } }</code>
この実装により、スレッドの作成と計算された値の取得を分離できます。以下に例を示します。
<code class="java">Foo foo = new Foo(); Thread thread = new Thread(foo); thread.start(); thread.join(); int value = foo.getValue(); // Retrieve the modified value</code>
重要な考慮事項
スレッドはネイティブに値を返さないことに注意することが重要です。通常のクラスと同様にスレッドを参照し、getValue() などのメソッドを使用してその値を要求することで、このギャップを埋めることができます。さらに、データ競合状態を防止し、スレッドの安全性を維持するために、同期メカニズムを確保する必要があります。
以上がJava でスレッド操作から値を返すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。