questions sur les threads

questions sur les threads - Java - Programmation

Marsh Posté le 17-06-2003 à 04:21:56    

Quand un objet qui extends ou implement thread est en pause, est il possible d'executer une methode de cet objet ?
Par exemple de l'exterieur de cet objet avec un autre thread.
 
 
Dans le code qui suit je ne comprends pas le sens de Thread.sleep(1000)
Je comprends pas sur quoi la methode s'execute.
 
http://java.sun.com/docs/books/tut [...] clock.html
 

Code :
  1. public class Clock extends Applet implements Runnable {
  2.     private Thread clockThread = null;
  3.     public void start() {
  4.         if (clockThread == null) {
  5.             clockThread = new Thread(this, "Clock" );
  6.             clockThread.start();
  7.         }
  8.     }
  9.     public void run() {
  10.         Thread myThread = Thread.currentThread();
  11.         while (clockThread == myThread) {
  12.             repaint();
  13.             try {
  14.                 Thread.sleep(1000);
  15.             } catch (InterruptedException e){
  16.             // the VM doesn't want us to sleep anymore,
  17.             // so get back to work
  18.             }
  19.         }
  20.     }
  21.     public void paint(Graphics g) {
  22.         // get the time and convert it to a date
  23.         Calendar cal = Calendar.getInstance();
  24.         Date date = cal.getTime();
  25.         // format it and display it
  26.         DateFormat dateFormatter = DateFormat.getTimeInstance();
  27.         g.drawString(dateFormatter.format(date), 5, 10);
  28.     }
  29.     // overrides Applet's stop method, not Thread's
  30.     public void stop() {
  31.         clockThread = null;
  32.     }
  33. }


 
 
Pourquoi c'est pas myThread.sleep(1000) a la place ?
 
Merci  :hello:


Message édité par karim63 le 17-06-2003 à 04:22:55
Reply

Marsh Posté le 17-06-2003 à 04:21:56   

Reply

Marsh Posté le 17-06-2003 à 07:58:13    

karim63 a écrit :


Dans le code qui suit je ne comprends pas le sens de Thread.sleep(1000)
Je comprends pas sur quoi la methode s'execute.


 
http://java.sun.com/j2se/1.4.1/doc [...] hread.html
 
sleep est une méthode statique. Cela signifie qu'elle ne s'appelle pas sur un objet particulier, mais sur une classe (ici java.lang.Thread). Elle n'a pas accès éléments non statique (les méthodes et attributs) dans la classe.  
 
Cela permet de mettre des traitements qui ne sont pas de l'ordre d'un objet particulier, mais qui impactent toutes les instances d'une certaine classe.


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 17-06-2003 à 08:33:33    

karim63 a écrit :

Quand un objet qui extends ou implement thread est en pause, est il possible d'executer une methode de cet objet ?
Par exemple de l'exterieur de cet objet avec un autre thread.


bha oui ... à moins qu'elles soit synchronizée que le thread qui dort soit en pause dans une méthode synchronizée aussi


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 17-06-2003 à 11:17:24    

Attention, karim, ne confonds pas le thread proprement dit, à l'exécution, et la localisation du code à exécuter dans ton programme.
 
Tant qu'un thread est endormi, il n'exécutera aucun code. C'est clair.
 
Maintenant, le fait qu'une méthode soit dans une sous-classe de Thread n'empêche en rien qu'un autre thread (qui n'est pas une instance de cette classe) ne puisse pas l'appeler.. Donc, un autre thread -- voire le thread du main -- peut tout à fait appeler une méthode de la sous-classe de Thread, même si toutes les instances de cette sous-classes sont des threads endormis.
Et c'est ce thread-là, celui qui appelle la méthode, qui va exécuter la méthode, évidemment.
 
Autrement dit, le thread qui appelle la méthode ne "demande" pas au thread endormi d'exécuter cette méthode, il l'exécute lui-même. Bref, c'est un simple appel de fonction. Plus simple et plus logique, non ?

Reply

Marsh Posté le 17-06-2003 à 13:26:11    

ok merci, c'est ce que je voulais savoir  :)


Message édité par karim63 le 17-06-2003 à 13:26:26
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed