web-dev-qa-db-fra.com

A quoi sert AtomicLong dans Java utilisé pour?

Quelqu'un peut-il expliquer à quoi AtomicLong est utilisé? Par exemple, quelle est la différence dans les déclarations ci-dessous?

private Long transactionId;
private AtomicLong transactionId;
28
Nilotpal

Il existe des différences significatives entre ces deux objets, bien que le résultat net soit le même, ils sont certainement très différents et utilisés sous circonstances très différentes.

Vous utilisez un objet Long de base lorsque:

  • Vous avez besoin de la classe wrapper
  • Vous travaillez avec une collection
  • Vous voulez seulement traiter des objets et non des primitives (ce qui fonctionne un peu)

Vous utilisez un AtomicLong lorsque:

  • Vous devez garantir que la valeur peut être utilisée dans un environnement simultané
  • Vous n'avez pas besoin de la classe wrapper (car cette classe ne sera pas mise en boîte automatique)

Long en soi ne permet pas l'interopérabilité des threads car deux threads peuvent à la fois voir et mettre à jour la même valeur, mais avec un AtomicLong, il existe des garanties assez décentes autour de la valeur que plusieurs threads verront .

En effet, à moins que vous ne vous souciez jamais de travailler avec des threads, vous n'aurez pas besoin d'utiliser AtomicLong.

33
Makoto