2012-09-10 3 views
7

私は比較的新しいJavaです。Javaのjava.util.concurrent.atomicパッケージのクラスの正確な使用方法は?

は、java.util.concurrent.atomic、私はそれの把握を取得するには、このパッケージのJavadocを理解しようとした:私は、パッケージ内のクラスの使用法が何であるかを理解しようとしています。しかし、私がこれらのクラスを使うべきときには、本当に意味がありません。誰かが簡単な言葉で例文や説明を付けることができますか? thx

+5

わかりませんでした。 – SLaks

+0

"同期に頼ることなくスレッドの干渉を防ぎます" http://docs.oracle.com/javase/tutorial/essential/concurrency/atomicvars.html – km1

+1

http://www.amazon.com/Java-Concurrency-Practice-Brian- Goetz/dp/0321349601 – SLaks

答えて

11

10個のスレッドがint i(0で初期化)をインクリメントし、コンソールの値を出力しているとします。 、

1 
2 
2 
3 
3 
5 
6 
6 
8 
10 

のAtomicIntegerは、例えば、各スレッドが書き込み動作が同期的に起こることを保証し、アトミックを値を増減できることを保証し、そして10スレッドの:あなたはこのような何かを得ることができます出力は常に次のようになります。

1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
+0

最初の例で3から5まで、6から8までスキップする理由は何ですか? 2つのスレッドが同時に値を読み取り、同じ値を書き込むべきではありませんか? – Pavel