bonjour,
jaurais aimais savoir comment on pouvait suspendre un thread et le reprendre sans utiliser suspend() et resum() vu quils sont depreciated??![]()
bonjour,
jaurais aimais savoir comment on pouvait suspendre un thread et le reprendre sans utiliser suspend() et resum() vu quils sont depreciated??![]()
Tout simplement en utilisant la méthode que proposait calogerogigante dans le sujet où je t'ai dis d'arrêter de les utiliser
http://www.developpez.net/forums/sho...d.php?t=144696
Pour une explication rapide des raisons de la dépréciation et des alternatives:
http://java.sun.com/j2se/1.4.2/docs/...precation.html
Oui, comme dit Sinok, si tu regardes l'exemple dans le post donné en lien, ma dernière modification à mon programme test et les deux suggestions de Sinok donne un truc pile poil fonctionnel (et je pense acceptable) pour gérer un thread...
En réfléchissant un peu le soucis est que ça pourrait finir à un deadlock, ou des erreurs d'acces, essaye de passer tes variables en synchronized
Ce serait avec plaisir, mais c'est une notion que j'ai pas encore approfondi : "synchronised" ??
C'est à cause de ça que j'avais trouvé l'exemple du singleton de Developpez.com un peu compliqué...
Est-ce vraiment indispensable, de coder les méthodes du thread en utilisant ce terme barbare de synchronised ???![]()
Salut,
Oui, a partir du moment où une ressource peut être accéder depuis plusieurs thread différent...Envoyé par calogerogigante
synchronized permet simplement de demander l'obtention d'un verrou sur une référence. Lorsque tu obtiens ce verrou tu as la garantie que le thread courant est le seul à obtenir ce verrou, et il ne sera rendu qu'une fois sortie du bloc synchronized. Si un autre thread demande le même verrou (même référence), il se retrouvera endormie jusqu'à qu'il soit libéré...
Cela permet d'éviter qu'un thread modifie un objet pendant qu'un autre est en train de le lire, ce qui pourrai provoquer des erreurs imprévisibles...
Ainsi si deux thread tente d'exécuter le code suivant :
Le premier a obtenir le verrour exécutera le code à l'intérieur du bloc, tandis que le second attendra que le verrour soit rendu (à la fin du bloc), pour pouvoir entrez à son tour dans le bloc.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 synchronized (object) { // do something }
Pour les méthodes, cela fonctionne de la même manière, sauf que la référence est this (l'instance de l'objet), ou la classe pour les méthode statique. Ainsi le code suivant :
Est équivalent à
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 public class Exemple { public synchronized void method() { // code ici } public static synchronized void staticMethod() { // code ici } }
a++
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 public class Exemple { public void method() { synchronized(this) { // code ici } } public static void staticMethod() { synchronized(Exemple.class) { // code ici } } }
Partager