Hallo,
Ich habe 2 Thread-Klassen erstellt. Die run()-Methode enthält eine Schleife die von 1 bis 20 zählt und das Ergebnis ausgibt. Die Ausgabe ist dann so: Thread 1 und Thread2 werden "gemischt" ausgegeben, dh. es wird beispielsweise für Thread1 von 0 bis 15 gezählt, anschließen zählt Thread2 von 0 bis 18, dann Thread1 von 16 bis 20 und dann wieder Thread2 von 19 bis 20. Soweit so gut.
Synchronized sollte aber, falls ich das richtig verstanden habe, dafür sorgen, dass zuerst Thread1 von 1 bis 20 zählt und anschließen Thread2.
Mein Problem: Dies geschieht jedoch nicht.
Java-code:
Thread 1:
Thread 2:
Main-Methode:Startklasse
Ausgabe:
Diese Ausgabe sollte eigentlich passen, wenn ich synchronized nicht verwende, aber nicht wenn ich dies tue oder?
Danke für eure Hilfe!
MfG Shana
PS: Ich habe die Suchfunktion verwendet und auch was zu dem Thema gefunden. Es sollte eigentlich funktionieren, jedoch hat mir das auch nicht geholfen, deswegen der Thread.
Ich habe 2 Thread-Klassen erstellt. Die run()-Methode enthält eine Schleife die von 1 bis 20 zählt und das Ergebnis ausgibt. Die Ausgabe ist dann so: Thread 1 und Thread2 werden "gemischt" ausgegeben, dh. es wird beispielsweise für Thread1 von 0 bis 15 gezählt, anschließen zählt Thread2 von 0 bis 18, dann Thread1 von 16 bis 20 und dann wieder Thread2 von 19 bis 20. Soweit so gut.
Synchronized sollte aber, falls ich das richtig verstanden habe, dafür sorgen, dass zuerst Thread1 von 1 bis 20 zählt und anschließen Thread2.
Mein Problem: Dies geschieht jedoch nicht.
Java-code:
Thread 1:
Code:
public class BspThread1 extends Thread{
public synchronized void Schleife1(){
for(int i = 0; i<= 20; i++) {
System.out.println("Thread1: " + i);
}
}
public void run(){
Schleife1();
}
}
Thread 2:
Code:
public class BspThread2 extends Thread{
public synchronized void Schleife2(){
for(int i = 0; i<= 20; i++) {
System.out.println("Thread2: " + i);
}
}
public void run(){
Schleife2();
}
}
Main-Methode:Startklasse
Code:
public class StartThreads {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
BspThread1 bspt1 = new BspThread1();
BspThread2 bspt2 = new BspThread2();
bspt1.start();
bspt2.start();
}
}
Ausgabe:
Code:
Thread1: 0
Thread1: 1
Thread1: 2
Thread1: 3
Thread1: 4
Thread1: 5
Thread1: 6
Thread1: 7
Thread1: 8
Thread1: 9
Thread1: 10
Thread1: 11
Thread1: 12
Thread1: 13
Thread2: 0
Thread2: 1
Thread2: 2
Thread2: 3
Thread2: 4
Thread2: 5
Thread2: 6
Thread2: 7
Thread2: 8
Thread2: 9
Thread2: 10
Thread2: 11
Thread2: 12
Thread2: 13
Thread2: 14
Thread2: 15
Thread2: 16
Thread2: 17
Thread2: 18
Thread1: 14
Thread2: 19
Thread2: 20
Thread1: 15
Thread1: 16
Thread1: 17
Thread1: 18
Thread1: 19
Thread1: 20
Diese Ausgabe sollte eigentlich passen, wenn ich synchronized nicht verwende, aber nicht wenn ich dies tue oder?
Danke für eure Hilfe!
MfG Shana
PS: Ich habe die Suchfunktion verwendet und auch was zu dem Thema gefunden. Es sollte eigentlich funktionieren, jedoch hat mir das auch nicht geholfen, deswegen der Thread.