Il suffit de voir qu’il y a AtomicBoolean classe en Java 5 et je voudrais poser une question générale. Comment je peux l’utiliser et ce qui est pour AtomicBoolean classe ?
Merci.
Il suffit de voir qu’il y a AtomicBoolean classe en Java 5 et je voudrais poser une question générale. Comment je peux l’utiliser et ce qui est pour AtomicBoolean classe ?
Merci.
Voici les notes (à Partir de Brian Goetz livre) j'ai fait que peut-être vous aider
AtomicXXX classes
la Non-bloking Compare-and-Swap la mise en œuvre
Profite de l'appui de fournir par le matériel (le CMPXCHG instruction sur Intel) Lorsque beaucoup de threads sont l'exécution de votre code qui utilise ces atomique de la simultanéité de l'API, ils à l'échelle beaucoup mieux que le code qui utilise le niveau de l'Objet les moniteurs de la synchronisation. Depuis, Java mécanismes de synchronisation rend le code d'attendre, quand il y a beaucoup de threads en cours d'exécution par le biais de votre les sections critiques, une importante quantité de temps PROCESSEUR est passé dans la gestion de la synchronisation mécanisme en lui-même (en attente, en notifiant, etc.). Depuis la nouvelle API utilise le matériel au niveau des constructions atomiques (variables) et d'attendre, et de verrouiller les algorithmes sans pour mettre en œuvre fil de sécurité, beaucoup plus de temps PROCESSEUR est passé de "faire des trucs" plutôt que dans la gestion de la synchronisation.
ne vous offrons pas seulement mieux le débit, mais ils fournissent également une plus grande résistance à liveness des problèmes tels que l'impasse inversion de priorité.
Il y a deux principales raisons pourquoi vous pouvez utiliser atomique de type boolean. D'abord par son mutable, vous pouvez le passer en tant que référence, et modifier la valeur qui est associée à la boolean lui-même, par exemple.
public final class MyThreadSafeClass{
private AtomicBoolean myBoolean = new AtomicBoolean(false);
private SomeThreadSafeObject someObject = new SomeThreadSafeObject();
public boolean doSomething(){
someObject.doSomeWork(myBoolean);
return myBoolean.get(); //will return true
}
}
et dans le someObject classe
public final class SomeThreadSafeObject{
public void doSomeWork(AtomicBoolean b){
b.set(true);
}
}
Plus important encore, son thread-safe et peut lui indiquer les développeurs de maintien de la classe, que cette variable devrait être modifié et lire à partir de plusieurs threads. Si vous n'utilisez pas un AtomicBoolean vous devez synchroniser la variable booléenne que vous utilisez en la déclarant volatils ou de synchronisation autour de la lecture et de l'écriture du champ.
L' AtomicBoolean
classe vous donne une valeur booléenne que vous pouvez mettre à jour automatiquement. L'utiliser lorsque vous avez plusieurs threads accèdent à une variable booléenne.
Le java.util.de façon concomitante.atomique paquet aperçu vous donne une bonne description de haut niveau de ce que les classes de ce package ne et quand les utiliser. Je recommande aussi le livre de Java de la Simultanéité dans la Pratique par Brian Goetz.
Extrait de la description de l'emballage
Package java.util.de façon concomitante.description atomique: Une petite trousse de classes qui prennent en charge sans verrouillage thread-safe de la programmation sur des variables individuelles.[...]
Les spécifications de ces méthodes de permettre des implémentations d'employer machine efficace au niveau atomique les instructions qui sont disponibles sur les processeurs.[...]
Les Instances de classes AtomicBoolean, AtomicInteger, AtomicLong, et AtomicReference chaque fournir un accès et des mises à jour à une seule variable du type correspondant.[...]
Les effets de mémoire pour les accès et les mises à jour de atomics généralement de suivre les règles pour les substances volatiles:
- a la mémoire des effets de la lecture d'une variable volatile.
- a la mémoire des effets de l'écriture (attribution) d'une variable volatile.
- weakCompareAndSet atomiquement lit, et à condition écrit une variable, est commandé à l'égard des autres opérations de mémoire sur cette variable, mais sinon, agit comme un ordinaire de la mémoire non volatile de l'opération.
- compareAndSet et tous les autres lire-et-opérations de mise à jour comme getAndIncrement ont la mémoire des effets de la lecture et de l'écriture des variables volatiles.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.