OVH Cloud OVH Cloud

Probleme avec synchronized

2 réponses
Avatar
tijeje
Salut a tous,

je dois modifier une application d'un collegue qui nous a quitte.
Celle-ci utilised les methodes de synchronisation "synchronized".

Cette application realise un echange de donnees entre des pages ASP et
une Applet Java.
Cette application fonctionne parfaitement sur un Client Win2000 et
Java 1.3
Mon gros probleme est que cette meme application ne fonctionne pas sur
un Client WinXP avec Java 1.4.1_01.

Lorsque je travaille avec la console Java je remarque que la
synchronisation ne s'effectue pas. Le 1er Thread est active a partir
de l'Applet elle-meme et le second est une fonction de l'applet appele
a partir un script java (lie a une page ASP).
Ce qui est bizzard est que le deuxieme Thread est appele (dans mon
cas) 3 fois, mais il n'envoie jamais au premier Thread le message
comme quoi il a ete actif et qu'il est termine. Seulement j'obtiens
les 3 Resultats souhaite mais simplement a la fin. Cela prouve que la
fonction est bien appele 3 fois differentes, mais ne le signale
jamais. Je donne le resultat de ma Console Java (c'est peut-etre un
peu plus clair).

J'ai l'impression que cela depend de la Version de Java, ou bien y'a
t'il une solution qui fonctionne avec les 2 sans probleme?

D'avance un grand merci a celles et ceux qui pourront eclaircir ma
situation.

Bon courage a tous.
Jerome

-------------------------------------------------
FonctionSubmit - url :
http://xxx.xxx.xxx.xxx/SocketServer.asp?Para1=ALL&Para2=&Empty=Empty
FonctionSubmit - url OK
- Resultat :
- Resultat :
- Resultat :
- Resultat :
- Resultat :
- ResultatObtenu : false
FonctionSubmit - url :
http://xxx.xxx.xxx.xxx/SocketServer.asp?Para1=IMP&Para2=&Empty=Empty
FonctionSubmit - url OK
- Resultat :
- Resultat :
- Resultat :
- Resultat :
- Resultat :
- ResultatObtenu : false
FonctionSubmit - url :
http://xxx.xxx.xxx.xxx/SocketServer.asp?Para1=PAI&Para2=&Empty=Empty
FonctionSubmit - url OK
- Resultat :
- Resultat :
- Resultat :
- Resultat :
- Resultat :
- ResultatObtenu : false
ASPResultat - Res = (tous);1;2;3;4;5;6;7;8;9;10;
ASPResultat - Res = (impair);1;3;5;7;9;
ASPResultat - Res = (pair);2;4;6;8;10;

2 réponses

Avatar
Isammoc
Je ne suis pas encore un pro, mais si c'est effectuer par deux machines
virtuelles, c'est normal non?
Ou alors une question de priorité des threads???

Isammoc
qui opte pour la seconde suggestion finalement
Avatar
Christophe M
Jerome wrote:
Salut a tous,

je dois modifier une application d'un collegue qui nous a quitte.
Celle-ci utilised les methodes de synchronisation "synchronized".



Salut,

le mot synchronized ne gère pas la "synchronisation"
Il est là pour empécher 2 threads différents d'accéder à la même
donnée/méthode en même temps.

pour la synchro il faut voir les méthodes : wait(), notify()

Example :
2 thread pour lire et écrire dans une file :
th2 -> fait appel à une méthode pour voir s'il y a des éléments dans
la file
th2 -> si y a pas, il se met en wait(), sinon il traite cet élément
th2 -> une fois le traitement fini, ou réveillé du wait() (par un
notify() ) on boucle pour l'élément suivant


th1 -> fait appele à une fonctione pour ajouter un élément dans la file
th1 -> fait un notify() pour dire qu'il y a du nouveau dans la file
(ce qui réveillera th2 s'il était "endormi")

Evidemment, les méthodes de lecture/écriture doivent être "synchonized"
sur l'objet file, càd qu'elle ne doivent pas accéder en même temps à la
file pour ne pas faire une lecture en même temps qu'une écriture et être
certains que l'état est stable.

Bon, ça c'est un exemple simple, il doit y avoir des méthodes plus
complexes (google=ami)

Et si j'ai dit une connerie, merci de me corriger ;-)

Christophe