Nunja, Datenverlust ist ja eigentlich das, was jeder Programmierer verhindern will. Ich schaffs aber nicht, diesen absichtlich herbeizuführen 
Idee:
1. Mein Prog erzeugt ein Objekt namens Zwischenspeicher, dort wird ein einzelner int-Wert gespeichert
2. Danach produziert es 25 Threads, die jeweils eine Zahl im Speicher ablegen, danach 2 Sekunden warten, danach den Wert wieder einlesen und vergleichen.
Ich hoffe nun, dass ein zweiter Thread seinen Wert ablegt, während der erste Thread nach dem Ablegen am Warten ist. Allerdings will mir das Programm diesen Gefallen nicht tun. Vielmehr scheinen die Threads zu warten, bis der vorherige fertig ist. Hier der Code:
[Java]public class Zwischenspeicher{
private int wert;
public int getWert(){
return wert;
}
public void setWert(int wert){
this.wert = wert;
}
}[/code]
simpler Speicher, mit Datenfeld, getter und setter.
"Bauplan" für die Threads. Die Kommentare stehen für die Variante, die den Datenverlust verhindern sollten.
Die "Start"-Klasse
Die Main-Methode wird schrittweise abgearbeitet, sie ist erst fertig, wenn jeder Thread fertig ist. Doch genau das ist nicht der Sinn der Threads, sondern Gleichzeitigkeit?
Wo habe ich hier meinen Denkfehler?
Idee:
1. Mein Prog erzeugt ein Objekt namens Zwischenspeicher, dort wird ein einzelner int-Wert gespeichert
2. Danach produziert es 25 Threads, die jeweils eine Zahl im Speicher ablegen, danach 2 Sekunden warten, danach den Wert wieder einlesen und vergleichen.
Ich hoffe nun, dass ein zweiter Thread seinen Wert ablegt, während der erste Thread nach dem Ablegen am Warten ist. Allerdings will mir das Programm diesen Gefallen nicht tun. Vielmehr scheinen die Threads zu warten, bis der vorherige fertig ist. Hier der Code:
[Java]public class Zwischenspeicher{
private int wert;
public int getWert(){
return wert;
}
public void setWert(int wert){
this.wert = wert;
}
}[/code]
simpler Speicher, mit Datenfeld, getter und setter.
Java:
public class ZahlThread extends Thread{
Zwischenspeicher speicher;
public ZahlThread(Zwischenspeicher speicher){
this.speicher = speicher;
}
//public synchronized void run()
public void run(){
try{
int uebergabeWert;
int erhalten;
speicher.setWert((uebergabeWert = (int)(Math.random() * 1000)));
//this.wait(2000);
this.sleep(2000);
if((erhalten = speicher.getWert()) == uebergabeWert){
System.out.println(uebergabeWert + " = " + erhalten);
}else{
System.out.println(uebergabeWert + " != " + erhalten);
}
}catch(InterruptedException e){
}
}
}
"Bauplan" für die Threads. Die Kommentare stehen für die Variante, die den Datenverlust verhindern sollten.
Java:
public class TestZahlThread{
public static void main(String[] args){
Zwischenspeicher speicher = new Zwischenspeicher();
ZahlThread[] threads = new ZahlThread[25];
for(int i = 0; i < 25; i++){
threads[i] = new ZahlThread(speicher);
threads[i].run();
System.out.println((i+1) + ". Durchlauf der while-Schleife");
}
System.out.println("main() wurde erfolgreich durchlaufen");
}
}
Die "Start"-Klasse
Die Main-Methode wird schrittweise abgearbeitet, sie ist erst fertig, wenn jeder Thread fertig ist. Doch genau das ist nicht der Sinn der Threads, sondern Gleichzeitigkeit?
Wo habe ich hier meinen Denkfehler?