Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1855 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Blocage de thread et déblocage simultané

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Blocage de thread et déblocage simultané

n°1680287
pops1
Posté le 01-02-2008 à 11:22:45  profilanswer
 

Bonjour,
 
c'est sans doute une question un peu "bateau" mais je la pose quand meme. En fait je dois lancer 2 threads en meme temps pour éxécuter la même méthode avec des paramètres différents. En fait dans mon thread principal j'aimerais lancer mes threads et ensuite les bloquer les deux. Ensuite je souhaiterais envoyer un signal qui débloquerait les deux threads en même temps.
 
Car le but de la manoeuvre est de créer un junit qui provoque un deadlock pour essayer de résoudre une problème d'EJB.
 
Donc pour provoquer ce deadlock il faut que mes deux threads exécutent ma méthode au même moment. Donc j'ai vraiment besoin de bloquer mes deux threads et de les débloquer en meme temps.
 
J'ai vu que les méthodes wait() et notifyAll() ne s'utilisaient qu'avec des synchronized. Or je ne veux pas que quand l'un réussi à prendre la main ca ne bloque l'autre. Il faut vraiment qu'il s'exécute en meme temps.
 
Donc si quelqu'un à une idée, ca serait cool de me la transmettre.
 
Merci d'avance

mood
Publicité
Posté le 01-02-2008 à 11:22:45  profilanswer
 

n°1681722
BifaceMcLe​OD
The HighGlandeur
Posté le 05-02-2008 à 00:27:22  profilanswer
 

Effectivement, il faut que tu "bloques" tes 2 threads en leur faisant appeler wait() sur un même objet, puis ton thread principal pourra ensuite faire un notifyAll() sur cet objet, ce qui les réveillera tous les deux.
Ne t'inquiète pas sur le coup du synchronized : quand un thread se met en "wait", il libère le verrou associé (ce que Sun appelle le "moniteur" de l'objet), ce qui permet à un autre thread de l'obtenir lorsqu'il entre dans un bloc synchronized.
 
Par contre, à moins de disposer d'une machine réellement multi-processeur, les 2 threads ne se réveilleront pas tout à fait en même temps. L'un se réveillera avant l'autre (la seule garantie que tu as est de ne pas pouvoir prévoir lequel sera réveillé en premier). Par ailleurs, il est vrai que le premier à se réveiller refera automatiquement l'acquisition du moniteur de l'objet sur lequel le synchonized a été fait... donc jusqu'à ce qu'il le libère, tous les autres threads réveillés par le notifyAll() seront remis en attente. En même temps, si la première chose que tu fais après le wait(), c'est sortir du bloc synchronized, tu ne verras pas vraiment que le moniteur as été réacquis : le thread réveillé libèrera le moniteur avant même qu'un autre thread ait eu le temps d'avoir la main.
 
A la place des basiques wait() et notify(), tu peux aussi utiliser des services plus évolués comme la classe java.util.concurrent.CyclicBarrier. Mais si tu analyses leur source, tu verras que cela revient au même que d'utiliser wait() et notify() (à la complexité de ton code près, ces classes évoluées le simplifiant largement et le rendant largement plus sûr).


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Blocage de thread et déblocage simultané

 

Sujets relatifs
Tuer threadThread et Evenement
[Thread/Socket] Serveur et client à la foisThread, boucle + timer ?
Objet Webbrowser + javascript + blocage js local IE7C# > Thread + Socket : Passage par parametre, je galere !
Lancer une thread dans une Jsp (sans Javabean)[VB.NET] Thread ?
UNIX, serveur multiconnexion(thread) pour tchatProblème de Thread qui ne fonctionne pas
Plus de sujets relatifs à : Blocage de thread et déblocage simultané


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR