Bonjour,

J'ai vu pas mal de code ressemblant à ceci sur internet et il est vrai que j'ai toujours fait comme ça:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
public class Test
{
   public void method1()
   {
      Thread t = new Thread("exemple"){
         @Override
         public void run()
         {
            ...
            method2();
         }
         };
 
      t.start();
   }
 
   public void method2()
   {
      ...
   }
}
Peut-il y avoir des problèmes de concurrences/synchronisation?

Si la method2() effectue des modifications sur des variables et que le run() du Thread t est plus complexe (il fait pleins de traitements et appelle plusieurs fois method2() le tout dans une boucle par exemple).
Que va-t-il se passer lorsque l'on utilisera la méthode method2() depuis une instance de Test? Ou si on touche aux variables qui sont modifié dans method2() alors que le Thread t tourne (et fait des modifications constamment)?

Autres questions:

D'après la doc java, une instance d'une classe interne ne peux vivre qu'à l'intérieur d'une instance de la classe de base (voir "inner classes" http://docs.oracle.com/javase/tutori...OO/nested.html). Qu'en est-il pour un Thread? Est-ce que le Thread t subsistera si l'instance de Test est détruite?


Autres exemples:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
 
public class Test2
{
   public final  LinkedList<String> queue = new LinkedList<String>()
 
   public void method1()
   {
      Thread t = new Thread("exemple"){
         @Override
         public void run()
         {
            ...
            queue.add("test");
            ...
            queue.pop();
            ...
         }
         };
 
      t.start();
   }
 
   public void method2()
   {
      ...
      queue.clear();
      ...
   }
}
Si entre le .add() et le .pop() du Thread, la méthode method2() est appelé, il y aura une erreur sur le .pop(). Comment gérer ça?


Merci d'avance pour vos réponses :-)