Un Thread en tant que classe interne, problème de synchro?
Bonjour,
J'ai vu pas mal de code ressemblant à ceci sur internet et il est vrai que j'ai toujours fait comme ça:
Code:
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:
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 :-)