# [Java] tableaux thread safe?



## SuperCed (18 Mai 2005)

J'ai un tableau de ce type :


```
boolean tab[16];
```

ou 


```
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.


----------



## eTeks (18 Mai 2005)

SuperCed a dit:
			
		

> J'ai un tableau de ce type :
> 
> ```
> boolean tab[16];
> ...


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 :

```
synchronized (tab) 
  {
    tab[0] = ...;
  }
```
 ou utiliser la classe Vector qui est Thread safe...


----------



## SuperCed (19 Mai 2005)

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.


----------

