変数をスレッドでスレッドに渡しますか?

私はここで何かが欠落しているのかどうかはわかりませんが、Javaの実行中の Thread に変数を渡すことは可能ですか?変数は変更され、同じスレッドに再送信する必要があります。

問題や例に関するチュートリアルは素晴らしいものです。

0
追加された 著者 check123,
あなたの問題についてより具体的に追加してみてください
追加された 著者 check123,
@pst本当にニックピックしたいのであれば、オブジェクトを渡すことは決してありません。オブジェクトへの参照だけを渡すこともできます。
追加された 著者 yshavit,
Nit:変数はJavaで決して渡されません。値は(オブジェクトは値の型ですが、ここではコールセマンティクスゲームに入りたくありません)。一部のオブジェクトは、コンテナとして変更されたり、動作したりすることがあります。
追加された 著者 user166390,
@yshavit私はそれを高水準のセマンティクスについて話すときの単なる専門用語として保有しています。それで私の先取り的な括弧のような注記です:-)私はcall-by-value-over-value-実装の詳細として(これは 呼び出されたものとの衝突を導入しないとして)、どのようにオブジェクトに名前が付けられているか(例えば、オブジェクト共有)。私がJVM /バイトコードの設計について議論していたのであれば、後者の呼び出しによる値の呼び出しは明らかにより適切です:)
追加された 著者 user166390,
ありがとうございますが、私は動的で時間の経過と共に変化する変数を渡す必要があります。
追加された 著者 user569322,

2 答え

2つの簡単な選択肢があります:

  • ConcurrentLinkedQueue:これは2つのスレッド間のスレッドセーフなパイプのように動作します。スレッドは必要に応じてキューにフィードを送り、もう一方は ブロッキングまたはポーリングのいずれかが必要です。

  • 共有変数とフラグを使用し、同期プリミティブを使用して、

2
追加された
BlockingQueue を使用すると、オファー/ポーリング、またはput/getなど、一般にCncurrentLinkedQueueよりも柔軟性があります。有限と無限の両方のフレーバーがあります。
追加された 著者 OldCurmudgeon,
ConcurrentLinkedQueueで注意すべき点は、無制限であるため、要求(puts)が処理(take)できるよりもはるかに高速になると、メモリが足りなくなる可能性があります。
追加された 著者 yshavit,
あなたの権利は、LinkedBlockingQueueが良い選択かもしれませんが、ConcurrentLinkedQueueはsize()メソッドを持っているので、自分でバインドしたりラッパーを記述することができます。 LinkedBlockingQueueブロックする場合は、ConcurrentLinkedQueueをポーリングし、何も利用できない場合は他の作業を実行する場合は...
追加された 著者 Tony BenBrahim,

一般的に、これを行う方法は、他のスレッドも知っているスレッドセーフな構造についてスレッドに知らせることです。 java.util。並行して動作するクラス。

For instance, both threads know about an instance of BlockingQueue. One thread puts Foos to the queue, and the other takes the Foos off that queue and does something with them.

1
追加された