Moin Leute,
ich habe grade einen kleinen Thread "Eieruhr" geschrieben. Dieser lässt mich ein Lebensmittel und eine dazugehörige Zeit einlesen.
Nach der eingegebenen Zeit in minuten/sekunden beendet der Thread und ich bekomme eine kleine Nachricht, dass das Lebensmittel fertig ist.
Hier ist der Code des Threads, ich weiß er sieht nicht schön aus
In der Mainmethode erstelle ich nun Objekte der Klasse und starte die Threads
Grundsätzlich arbeitet der Thread korrekt, wenn ich allerdings zwei oder mehrere Threads starte, werde ich auch zweimal direkt zur Eingabe aufgefordert.
Es läuft zwar trotzdem korrekt ab, ist aber unschön.
Hier die komplette Ausgabe:
Ich hätte es gerne so, dass die Eingabe ein kritischer Bereich ist, und lediglich ein Prozess diesen Betreten kann.
Die Threads sollen weiterhin quasi-parallel laufen, jedoch erst starten wenn die Einhabe abgeschlossen ist.
Vielleicht hat jemand Ideen wie ich dies realisieren kann, würde mich über Hinweise und Tips freuen.
LG,
Alex
ich habe grade einen kleinen Thread "Eieruhr" geschrieben. Dieser lässt mich ein Lebensmittel und eine dazugehörige Zeit einlesen.
Nach der eingegebenen Zeit in minuten/sekunden beendet der Thread und ich bekomme eine kleine Nachricht, dass das Lebensmittel fertig ist.
Hier ist der Code des Threads, ich weiß er sieht nicht schön aus
Java:
import java.util.InputMismatchException;
import java.util.Scanner;
import java.awt.Toolkit;
public class Eieruhr extends Thread{
long time_start = System.currentTimeMillis() % (1000 * 60 * 60 * 24);
int hours = (int)(time_start / 1000 / 60 / 60);
int minutes = (int)(time_start / 1000 / 60) % 60;
int seconds = (int)(time_start / 1000) % 60;
public synchronized void run(){
try{
Scanner in = new Scanner(System.in);
System.out.println("Eingabe: ");
String name = in.next();
int input_min = in.nextInt();
int input_sec = in.nextInt();
assert (input_min <= 60) && (input_sec <= 60);
this.setName(name);
long waitintervall = (long)(input_min * 60000)+(input_sec * 1000);
System.out.print("Es ist "+hours+":"+minutes+":"+seconds+" Uhr. ");
long p1 = (time_start + waitintervall);
int hours_p1 = (int)(p1 / 1000 / 60 / 60);
int minutes_p1 = (int)(p1 / 1000 / 60) % 60;
int seconds_p1 = (int)(p1 / 1000) % 60;
System.out.print("Um "+hours_p1+":"+minutes_p1+":"+seconds_p1+" kommt die Meldung: "+this.getName()+" fertig.\n");
sleep(waitintervall);
}
catch (InputMismatchException e){System.out.println("Nur Kombinationen der Form <String> <Int> <Int> sind zulässig");}
catch (AssertionError e){System.out.println("Fehlerhafte Minuten/Sekunden Kombination eingegeben");}
catch (InterruptedException e){System.out.println("loloo");}
System.out.println(this.getName()+" fertig.");
Toolkit.getDefaultToolkit().beep();
}
}
In der Mainmethode erstelle ich nun Objekte der Klasse und starte die Threads
Java:
import java.util.InputMismatchException;
import java.util.Scanner;
public class main {
public static void main(String[] args) {
Eieruhr t1 = new Eieruhr();
Eieruhr t2 = new Eieruhr();
t1.start();
t2.start();
}
}
Grundsätzlich arbeitet der Thread korrekt, wenn ich allerdings zwei oder mehrere Threads starte, werde ich auch zweimal direkt zur Eingabe aufgefordert.
Es läuft zwar trotzdem korrekt ab, ist aber unschön.
Hier die komplette Ausgabe:
Code:
Eingabe:
Eingabe:
MIlch 0 10
Es ist 8:35:26 Uhr. Um 8:35:36 kommt die Meldung: MIlch fertig.
BUtter 0 5
Es ist 8:35:26 Uhr. Um 8:35:31 kommt die Meldung: BUtter fertig.
BUtter fertig.
MIlch fertig.
Ich hätte es gerne so, dass die Eingabe ein kritischer Bereich ist, und lediglich ein Prozess diesen Betreten kann.
Die Threads sollen weiterhin quasi-parallel laufen, jedoch erst starten wenn die Einhabe abgeschlossen ist.
Vielleicht hat jemand Ideen wie ich dies realisieren kann, würde mich über Hinweise und Tips freuen.
LG,
Alex