2012-09-10 8 views
7

Sono relativamente nuovo java. Sto provando a capire quali sono l'utilizzo di classi del pacchetto:Qual è l'uso esatto delle classi nel pacchetto java.util.concurrent.atomic in Java?

java.util.concurrent.atomic

ho cercato di capire il Javadoc per questo pacchetto di ottenere una comprensione di esso. Ma non poteva davvero avere alcun senso su quando dovrei usare queste lezioni. Qualcuno può dare esempi e più descrizioni in parole semplici? thx

+5

Cosa non capisci? – SLaks

+0

"impedisce l'interferenza del thread senza ricorrere alla sincronizzazione" http://docs.oracle.com/javase/tutorial/essential/concurrency/atomicvars.html – km1

+1

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

risposta

11

Considerare 10 thread stanno incrementando int i (inizializzato a 0) ed emettendo il valore della console. È possibile ottenere qualcosa di simile:

1 
2 
2 
3 
3 
5 
6 
6 
8 
10 

AtomicInteger, per esempio, assicura che ogni thread può incrementare o decrementare il valore atomicamente, assicurando che l'operazione di scrittura avviene in modo sincronizzato, e per 10 thread, la l'output sarebbe sempre:

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

Perché salti da 3 a 5 e da 6 a 8 nel tuo primo esempio? Non dovrebbero 2 thread leggere un valore allo stesso tempo e scrivere lo stesso valore? – Pavel