[Java] tableaux thread safe?

SuperCed

Membre expert
Club iGen
20 Juin 2001
1 353
72
46
superced.rb38.eu
J'ai un tableau de ce type :

Bloc de code:
boolean tab[16];

ou

Bloc de code:
MaClasse tab2[16];

Je voudrais savoir si ces classes sont thread safe? Peut on faire une effectation depuis 2 thread en même temps?
En gros, je voudrais savoir si le fait d'écrire dans ces classes depuis 2 threads concurrents posera problème.

Sinon, je vais faire un classe spécifique qui englobe mes deux tableaux privés avec des accesseurs synchonisés.

La question est de savoir si c'est utile ou non.
 
SuperCed a dit:
J'ai un tableau de ce type :
Bloc de code:
boolean tab[16];
ou
Bloc de code:
MaClasse tab2[16];
Je voudrais savoir si ces classes sont thread safe? Peut on faire une effectation depuis 2 thread en même temps?
En gros, je voudrais savoir si le fait d'écrire dans ces classes depuis 2 threads concurrents posera problème.
Qu'entends-tu par thread safe ? Comme dans la classe Vector ? Vu qu'un tableau ne peut changer de taille ça n'est pas trop grave pour le tableau lui-même en tout cas. Tout dépend de ce que tu veux faire avec les éléments du tableau.
Au passage boolean tab[16]; ça ne compile pas en Java ; il faut écrire boolean tab [] = new boolean [16]; ;)

SuperCed a dit:
Sinon, je vais faire un classe spécifique qui englobe mes deux tableaux privés avec des accesseurs synchonisés.
Tu peux aussi utiliser directement un bloc synchronisé sur le tableau :
Bloc de code:
synchronized (tab) 
  {
    tab[0] = ...;
  }
ou utiliser la classe Vector qui est Thread safe...
 
Ca compile si ta méthode est déclartée en static.

Pour thread safe, j'entends la même chose que pour vector.

Le fait de pouvoir changer ou non la taille du tableau ne change rien au problème.
Il ne faut pas que 2 thread concurrent écrivent en même temps.

Mais j'ai eu ma réponse, les tableaux ne semble pas thread safe, car au contraire de vector, il n'y a pas de système de lock sur les accésseurs.
D'autre par une affectation sur le tableau ou une lecture n'est pas atomique.

Merci.