Bonjour a tous,
j'ai fais un programme java client/serveur :
il y a un serveur qui acceuille les clients, les clients emettent des demandes, qui sont alors stockées dans une file (elle meme stockées sur le serveur Accueil)
et il y a egalement un serveur Traitement qui se charge de consulter la file de demande et de traiter les demandes les uns apres les autres.
Le serveur Traitement doit donc accéder a la file de Demandes qui est sur le serveur Acceuil.
Cepandant j'ai un probleme : pour tester j'ai voulu faire une boucle sur le serveur Traitement qui affiche toutes les 10 secondes la taille de la file de la maniere suivante :
while(true){
int i =Accueil.fileDemandes.taille();
Thread.sleep(15000);
System.out.println(i);
}
cepandant cela m'affiche toujours 0 alors que je suis sur que mon serveur Acceuil push bien dans la file lorsqu'un client emet une demande :
Accueil.fileDemandes.push(d);
pouvez vous m'aider s'il vous plait ?
la file est en public static sur le serveur Acceuil
et pour y accéder, tu met un verrou, au lieu de "int i =Accueil.fileDemandes.taille();", tu met :
Code :
int i;
synchronized(Accueil.fileDemandes) {
i = Accueil.fileDemandes.size();
}
Taz
bisounours-codeur
Posté le 26-02-2008 à 12:12:02
mauvais exemple avec size(), justement tu ne fais pas ça, puisque la collection est synchronized. Par contre, pour faire un ensemble d'opérations liées, tu fais un bloc synchronized
Message édité par Taz le 26-02-2008 à 12:12:49
Zoltan87
Posté le 26-02-2008 à 14:02:42
mon push et ma methode taille sont comme suit :
public synchronized int taille()
{ return lesObjets.size();
}
public synchronized void push(E unObjet)
{
lesObjets.add(unObjet);
}
je ne comprend pas, pourtant elles sont synchronized je suis vraiment "a la ramasse"