Cheville Femme Fermeture CM 6 Juannoy Jushee Aiguille X1wgT1x

Cheville Femme Fermeture CM 6 Juannoy Jushee Aiguille X1wgT1x Cheville Femme Fermeture CM 6 Juannoy Jushee Aiguille X1wgT1x Cheville Femme Fermeture CM 6 Juannoy Jushee Aiguille X1wgT1x
invisibleSHIELD invisibleSHIELD Solar Bottes Solar Femme invisibleSHIELD Bottes Femme UIqUx8fwn
invisibleSHIELD invisibleSHIELD Solar Bottes Solar Femme invisibleSHIELD Bottes Femme UIqUx8fwn

L'API Java nous offre déjà quelques solutions pour construire des collections thread-safe . Les classes Fermeture Femme 6 Aiguille Cheville Juannoy CM Jushee Vector et Hashtable sont synchronisées, et la classe Collections expose plusieurs méthodes pour créer des collections synchronisées, par enveloppement de ces collections et synchronisation des accès. Malheureusement ces classes ne sont pas suffisantes pour traiter de façon atomique des problèmes simples.

de Emery Neige Bottes fourr Merrell 1WYwqEda1

Synchroniser une collection ou une table, comme c'est le cas pour Vector et Hashtable n'apporte pas toujours de solution satisfaisante, voire pas de solution du tout. Une collection utilisée en concurrence d'accès peut poser des problèmes, même si tous ses accès sont synchronisés.

Comme nous l'avons déjà vu, itérer sur une collection alors qu'une autre partie de l'application ajoute des éléments dedans peut mener à une ConcurrentModificationException. Or, quelques méthodes peuvent itèrer en interne, sans exposer explicitement ce comportement. C'est le cas de hashCode(), et des méthodes du type addAll(), containsAll(), removeAll() ou retainAll(). Dans tous ces cas, la synchronisation n'est pas suffisante, on a besoin d'un mécanisme différent, qui nous garantisse le fonctionnement dans tous les cas possibles de la concurrence d'accès.

Bottes dkode Sachi pour Spartan Femme 0pEqZqYwF
Bottes dkode Sachi pour Spartan Femme 0pEqZqYwF

L'API Concurrent propose de nouvelles implémentations de quelques interfaces de l'API Collection, qui enrichissent ces interfaces de quelques méthodes, et apportent des solutions complètes aux problèmes que nous venons de présenter.

On ne parle pas de collections synchronisées pour ces nouvelles interfaces et classes, mais plutôt de collections concurrentes. Ces collections concurrentes sont utilisées pour résoudre les problèmes de forte concurrence d'accès, sans sacrifier aux pertes de performances que peut entraîner la synchronisation à outrance.

Yalanshop Femme Chaussures Yalanshop Femme mar xnOwf

Deux classes sont apportées par l'API Concurrent, implémentation respectivement de List et de Set : CopyOnWriteArrayList et CopyOnWriteArraySet.

L'implémentation CopyOnWriteArrayList apporte deux opérations supplémentaires à List, qui sont atomiques : addItAbsent(T t) et addAllAbstent(Collection collection).

Ces deux classes peuvent être utilisées en concurrence d'accès. On peut itérer dessus sans risque qu'une exception de type ConcurrentModificationException soit jetée.

Cheville Jushee Aiguille Femme Fermeture Juannoy CM 6 Ces deux collections sont construites sur des tableaux d'objets, qui sont recopiés intégralement à chaque fois qu'une modification est effectuée. Seul le changement de tableau (qui n'est qu'un jeu de pointeurs) est synchronisé. Toutes les opérations de lecture sont effectuées sur un unique tableau, en lecture seule, qui ne pose donc aucun problème de modification concurrente.

Ces deux classes ne sont donc pas utilisables dans tous les cas. Les lectures sont très performantes, mais les écritures très peu performantes. Les bons cas sont donc ceux dans lesquels les lectures sont beaucoup plus fréquentes que les modifications, et pour les collections qui ne sont pas trop volumineuses.

L'API Concurrent fournit dans ce domaine une interface et quelques implémentations. Cette interface ajoute quatre méthodes, que nous allons voir.

L'interface ConcurrentMap est une extension de Map, qui propose les méthodes supplémentaires suivantes.

  • putIfAbsent(K key, V value) : ajoute ce couple (clé, valeur) si cette clé n'est pas déjà présente.

  • remove(Object key, Object value) : retire cette clé de la table, si elle est associée à la valeur passée en paramètre. Cela permet d'éviter de retirer une clé qu'un autre Cheville 6 Juannoy Jushee Aiguille Fermeture CM Femme thread aurait ajoutée par ailleurs.

  • replace(K key, V value) : remplace la valeur associée à cette clé par celle passée en paramètre.

  • replace(K key, V oldValue, V newValue) : remplace la valeur associée à cette clé par celle passée en paramètre, si l'actuelle valeur est oldValue.

L'implémentation fournie par l'API Concurrent est ConcurrentHashMap.

Son implémentation est la classe ConcurrentHashMap. Elle autorise autant de lectures que l'on veut, et ces lectures sont non-bloquantes. Les itérateurs construits sur cette table ne jettent pas de ConcurrentModificationException.

En revanche, les opérations de modifications sont contrôlées. Lors de la construction de cette table, on peut lui passer un paramètre, concurrencyLevel (la valeur par défaut est 16), qui règle certains éléments internes de la table. Le but est de réduire les goulets d'étranglement, tout en conservant la sécurité des opérations concurrentes.

Java API avancées
Retour au blog Java le soir
Cours & Tutoriaux

Table des matières

+ API Collection
+ Génériques
+ Expressions régulières
+ Introspection
Lacets Neig Fourrure de Bottines Bottes Fille Femme JACKSHIBO Bottes Boots Plates Hiver w4Xzzf
CM Femme Fermeture Juannoy Cheville 6 Aiguille Jushee + Programmation concurrente
1. Introduction
+ 2. Lançons nos premiers threads
+ 3. Concurrence d'accès
+ 4. Synchronisation
+ 5. Opérations atomiques
+ 6. Collections synchronisées et concurrentes
6.1. Introduction
6.2. Position du problème
6.3. Solutions proposées
+ 7. Files d'attente
+ 8. Classes utilitaires de l'API Concurrent
+ 9. Pattern executor
+ 10. Classes de contrôle d'accès
+ 11. Sémaphores, barrières et latches