bonjour tout le monde,
soit le programme java suivant:
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
 
package tp8;
 
public class Testesync implements Runnable{
private int balance;
	public static void main(String[] args) {
		Testesync obj = new Testesync();
		Thread t = new Thread(obj);
		Thread tt = new Thread(obj);
		t.setName("Thread 1");
		tt.setName("Thread 2");
		t.start();
		tt.start();
 
	}
	public void run(){
	for(int i = 0;i<5;i++){
		incrementer();
		System.out.println(Thread.currentThread().getName()+" balance is :"+balance);
	}
 
	}
	void incrementer(){
		int i = balance;
		balance = i+1;
	}
 
}
l'exécution de ce programme donne:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
Thread 1 balance is :1
Thread 1 balance is :3
Thread 1 balance is :4
Thread 1 balance is :5
Thread 1 balance is :6
Thread 2 balance is :2  // ????
Thread 2 balance is :7
Thread 2 balance is :8
Thread 2 balance is :9
Thread 2 balance is :10
quelqu'un peut m'expliquer ce résultat. notamment : Thread 2 balance is :2
si un thread est bloqué par la JVM , est ce qu'il fait la sauvgarde de l'état de ses variables (mème partagés). si oui au reprend il consulte l'état des variables sauvgardé et non pas les nouveaux états, n'est ce pas?
remarque: je sais pour résoudre ce type de problème je dois utiliser synchronized.
merci d'avance.