Hallo!
ich spiele im Moment ein wenig mit Threads. Dabei wollte ich auch "synchronized" testen.
Hierfür habe ich folgendes geschrieben:
Klasse1
Klasse2
Leider bekomme ich trotz "synchronized" folgendes:
Ich habe mir aber folgendes vorgestellt:
Habe ich vielleicht etwas falsch verstanden?
Hoffe, ihr könnt mir weiterhelfen.
Danke.
Alex
ich spiele im Moment ein wenig mit Threads. Dabei wollte ich auch "synchronized" testen.
Hierfür habe ich folgendes geschrieben:
Klasse1
Code:
public class MyThread extends Thread{
private String name;
private Counter counter;
public MyThread(String name, Counter counter)
{
this.name = name;
this.counter = counter;
}
public static void main(String[] args)
{
Thread[] t = new Thread[5];
Counter cnt = new Counter(10);
for (int i = 0; i < 5; ++i) {
t[i] = new MyThread ("Thread-"+i,cnt);
t[i].start();
}
}
public void run()
{
while (true) {
System.out.println(counter.nextNumber()+" for "+name);
}
}
}
Klasse2
Code:
class Counter
{
int cnt;
public Counter(int cnt)
{
this.cnt = cnt;
}
public synchronized int nextNumber()
{
int ret = cnt;
cnt++;
return ret;
}
}
Leider bekomme ich trotz "synchronized" folgendes:
Code:
...
2609 for Thread-1 <-- hier ist das Problem
2611 for Thread-1
2363 for Thread-3 <-- hier ist das Problem
2612 for Thread-3
2613 for Thread-3
...
Ich habe mir aber folgendes vorgestellt:
Code:
2610 for Thread-1
2611 for Thread-1
2612 for Thread-3
2613 for Thread-3
2614 for Thread-3
Habe ich vielleicht etwas falsch verstanden?
Hoffe, ihr könnt mir weiterhelfen.
Danke.
Alex