1

たとえば、同期のない可変クラス Foo (または ArrayList など) があります。このようなオブジェクトの構築には時間がかかるため、別のスレッドで実行したいと考えています。

計算の結果をどこかに保存し、後で別のスレッドからアクセスすると、同期または揮発性が必要になるため、スレッドセーフではありませんよね? (ここは正直よくわかりません)

そのため、Foo を同期せずに、そのようなオブジェクトをあるスレッドから別のスレッドに渡す方法を探しています。

4

3 に答える 3

1

これは、Future を作成し、後で同じ実行スレッドで結果を取得することで解決できるものではないのではないかと最初に考えます。これにより、すべてが非常に簡単になります。

于 2013-08-26T13:40:50.607 に答える
1

あなたの要件はProducer Consumer Patternに一致します。Java の並行パッケージ a は、スレッドセーフなコレクション (BlockingQueueなど) を提供します。Producer がオブジェクトを作成し、 に配置しBlockingQueueます。次に、コンシューマがオブジェクトを取得します。これが実装例です。

于 2013-08-26T13:28:29.187 に答える
0

そのためにAtomicReferenceを使用することもできます。この回答を見てください: Java で AtomicReference を使用する場合は?

こちらもご覧ください: Java Concurrency: CAS vs Locking

とは言っても、並行プログラミングを正すのは困難です。したがって、できるだけシンプルに保ち、Java が提供する標準的なsynchronize方法を共通のロックで使用することをお勧めします。それがボトルネックであることに気付いた場合は、後でいつでも別のより洗練された方法を使用できます。

于 2013-08-26T14:53:37.930 に答える