Quelles opérations dans Java sont considérées comme atomiques?
et peut-être quelque chose de plus. Regardez le jls .
Comme indiqué dans les commentaires, l'atomicité n'implique pas la visibilité. Ainsi, alors qu'un autre thread est garanti de ne pas voir un int
partiellement écrit, il peut ne jamais voir la nouvelle valeur.
Les opérations sur long et double se font sur des CPU 64 bits courants atomiques également , bien qu'il n'y ait aucune garantie. Voir aussi ceci demande de fonctionnalité .
En Java, la lecture et l'écriture de quantités 32 bits ou inférieures sont garanties atomiques.
Par atomique, nous voulons dire que chaque action se déroule en une seule étape et ne peut pas être interrompue. Ainsi, lorsque nous avons des applications multithread, les opérations de lecture et d'écriture sont thread-safe et n'ont pas besoin d'être synchronisées.
Par exemple, le code suivant est thread-safe:
public class ThreadSafe
{
private int x;
public void setX(int x)
{
this.x = x;
}
}
Il semblerait semble que les affectations de longs soient atomiques, basées sur cette méthode dans AtomicLong.Java:
public final void set(long newValue) {
value = newValue;
}
Notez l'absence de toute synchronisation.