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

  FORUM HardWare.fr
  Programmation
  Java

  Le super mot-clé de Java et le multithreading

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Le super mot-clé de Java et le multithreading

n°2440431
joun17
be cool
Posté le 16-02-2023 à 14:03:17  profilanswer
 

Je suis un nouveau venu dans le monde Java. En faisant des recherches sur le multithreading, je suis tombé sur le programme suivant :

Code :
  1. class Shared
  2. {
  3. int x;
  4. synchronized void show(String s,int a)
  5. {
  6.   x=a;
  7.   System.out.println("Starting in method" +s+  " " +x);
  8.   try
  9.   {
  10.      Thread.sleep(2000);
  11.   }
  12.   catch (Exception e)
  13.   {
  14.    System.out.println("Ending from method" +s+ " " +x); 
  15.   } 
  16. }
  17. }
  18. class CustomThread extends Thread
  19. {
  20.   Shared s;
  21.   public CustomThread(Shared s,String str)
  22. {
  23. super (str);
  24.   this.s=s;
  25.   start();
  26. }
  27. public void run()
  28. {
  29. s.show(Thread.currentThread().getName(),10 );
  30. }
  31. class CustomThread1 extends Thread
  32. {
  33.     Shared s;
  34.     public CustomThread1(Shared s,String str)
  35.   {
  36.      super (str);
  37.   this.s=s;
  38.   start();
  39. }
  40.    public void run()
  41.   {
  42.    s.show(Thread.currentThread().getName(),20);
  43.   }
  44. class RunSyn
  45. {
  46.    public static void main(String...s)
  47.    {
  48.       Shared st=new Shared();
  49.       CustomThread t1=new CustomThread(st,"one" );
  50.       CustomThread1 t2=new CustomThread1(st,"two" );
  51.        }
  52.     }


Dans ce contexte, que fait la ligne super(str) ? Autant que je sache, il invoque le constructeur de la classe Thread Thread (nom de la chaîne). Cela entraîne la création d'un nouvel objet Thread.
Cependant, on peut observer dans la sortie que la chaîne fournie dans le constructeur de CustomThread et CustomThread1 est passée dans l'affichage vide (String s,int a) de Shared class?
J'ai vu cet oracle document qui indiquait que le constructeur de classe de thread qui accepte un paramètre String génère un Thread avec un nom spécifié (plutôt que des noms générés automatiquement comme Thread-1) mais à partir de ici, il indique que l'instruction super (String) est un appel explicite de constructeur de super classe. Les deux déclarations sont déroutantes pour moi. Est-ce que les deux ont raison ? Pourriez-vous s'il vous plaît clarifier ce qui se passe?
Merci!!

mood
Publicité
Posté le 16-02-2023 à 14:03:17  profilanswer
 

n°2440476
dalfab
Posté le 17-02-2023 à 19:01:58  profilanswer
 

joun17 a écrit :

Autant que je sache, il invoque le constructeur de la classe Thread Thread (nom de la chaîne).

Oui.

joun17 a écrit :

Cela entraîne la création d'un nouvel objet Thread.

Non, créer un objet appelle le constructeur. Mais appeler le constructeur ne crée pas un objet. C'est ici une étape de la construction de CustomThread.

joun17 a écrit :

Cependant, on peut observer dans la sortie que la chaîne fournie dans le constructeur de CustomThread et CustomThread1 est passée dans l'affichage vide (String s,int a) de Shared class?

Je ne comprends pas la question!

joun17 a écrit :

J'ai vu cet oracle document qui indiquait que le constructeur de classe de thread qui accepte un paramètre String génère un Thread avec un nom spécifié (plutôt que des noms générés automatiquement comme Thread-1) mais à partir de ici, il indique que l'instruction super (String) est un appel explicite de constructeur de super classe. Les deux déclarations sont déroutantes pour moi. Est-ce que les deux ont raison ? Pourriez-vous s'il vous plaît clarifier ce qui se passe?
Merci!!

C'est qu'il se passe dans ce code. Pour prendre en compte le nom du thread un appel explicite du constructeur de Thread est nécessaire, c'est le super( str );.

n°2441568
masklinn
í dag viðrar vel til loftárása
Posté le 28-02-2023 à 18:43:22  profilanswer
 

Citation :

Dans ce contexte, que fait la ligne super(str) ? Autant que je sache, il invoque le constructeur de la classe Thread Thread (nom de la chaîne). Cela entraîne la création d'un nouvel objet Thread.


Non, l'appel au constructeur entraine la partie de l'initialisation à sa charge.

 

Tu peux y penser comme le mot clé "new" entrainant la création d'un nouvel objet dans un état indéfini. Le constructeur est appelé derrière, pour définir l'état initial de l'objet.

Citation :

Est-ce que les deux ont raison ? Pourriez-vous s'il vous plaît clarifier ce qui se passe?


"super" va appeler le constructeur parent sur le thread existant (le "this" ). Ça va simplement déléguer sans contexte d'exécution, ce qui permet de faire faire ce que le constructeur parent a besoin de faire (comme initialiser le nom du thread, mais aussi allouer les resources OS liées à l'objet par exemple).


Message édité par masklinn le 28-02-2023 à 18:45:59

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody

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

  Le super mot-clé de Java et le multithreading

 

Sujets relatifs
IOException en Java est levée par isReachableEn Java, vous pouvez convertir une liste en tableau.
Copier les questions du constructeur sur JavaProblèmes de conversion Java du binaire au décimal (tableaux)
Java est égal à () sélectionimporter le code en Java fait par StarUml dans eclipse
Duree d'execution programme javaEncodage RSA Javascript Vs Java
mise à jour java et problème de résolutionAndroid java quelle application tourne au premier plan ?
Plus de sujets relatifs à : Le super mot-clé de Java et le multithreading


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