« Programmation Java/Processus légers et synchronisation » : différence entre les versions

Contenu supprimé Contenu ajouté
 
Ligne 220 :
map.put("titi", "valeur exemple 1");
...
synchronized(map) { str=map.get("tutu");}
 
</syntaxhighlight>
...
<syntaxhighlight lang="java">
synchronized(map)
{
if (!map.containsKey("titi"))
Ligne 232 :
</syntaxhighlight>
 
Un autre thread ne peut pas effectuer de modification entre containsKey et put, du fait du verrou posépris par l'instruction synchronized sur l'objet map. Mais cette solution est en réalité peu efficace car elle contraint le plus souvent à protéger tous les accès à la liste, en lecture comme en écriture, alors que les accès en lectures multiples n'ont pas à être bloquants, seuls ceux en écriture devant l'être. La classe ConccurentHashMap possède un putIfAbsent. Il est possible de réimplanter cette caractéristique via la synchronisation sur deux valeurs, mais les classes fournies par java.util.concurrent sont, elles, exemptes de bugs.
 
Si la classe de liste ne vous satisfait pas, la pose de verrou via la classe ReentrantReadWriteLock est extrêmement simple.
 
Si la classe de liste ne vous satisfait pas, la pose de verrou via la classe ReentrantReadWriteLock est extrêmement simple.
 
<noinclude>[[Catégorie:Threads|Java]]</noinclude>