Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Aber wie kann ich mehrere Threads parallel laufen lassen?
z.B.
Ich hab ein Programm, das eine eingebaute Uhr hat -> 1. Thread nötig
Ich will eine Diashow in meinem Programm haben, wo die Graphiken z.B. alle 3 Sekunden wechseln -> 2. Thread nötig
So wie mache ich das jetzt nun, wenn ich mehrere Threads parallel laufen lassen will?
Habe ich mir auch schon gedacht, das ich mit einer FOR-Schleife arbeite und immer mit dem von mir niedrigsten Intervall erhöhe und dann die einzelnen Anweisungen oder Sequenzen mit If.Kontrollstrukturen aufrufe.
Das sieht dann in etwa so aus:
Code:
try{
for(long i=10; true; Thread.sleep(1000)){
if (i%3000 == 0){
//....
}
if(i%1000 == 0){
//...
}
if(i<= 1000*60*60*24*365){ //angegebene Zeit = Millisekunden von einem Jahr
i+=1000; //Das Intervall der Threads erhöht sich immer um 1000 Millisekunden
}else{
i = i -1000*60*60*24*365;
}
}
}catch (InterruptedException e){
//... vielleicht noch eine Fehlermeldung ausgeben
System.exit(0);
}
Also diese Methode "würde" laufen, aber jetzt kommt es: Java ist ja nun sowas von larmarschig, das durch die Nebenberechnungen (sowas wie i%1000), pro Tag bei einem 2GHz Rechner die ganze Sache schon um knappe 1,5 Minuten falsch gehen würde! Was ist jetzt wenn ich z.B. noch andere Programme neben meinem Java-Programm betreibe? Dann sind es vielleiht schon 4 oder 5 Minuten pro Tag!
Der eine Thread mit den Abzweigungen läuft, aber nicht gerade efektiv, wie kann man das Resultat verbessern?
Hallo Iome,
ich hab da mal was vorbereitet, damit du mal siehst, wie das mit dem Ableiten von Thread ist:
Code:
public class ClockThread extends Thread{
private boolean running = true;
public void run(){
SimpleDateFormat sdtf = new SimpleDateFormat("dd.MM.yyyy");
while(running){
Calendar cal = Calendar.getInstance();
System.out.println(sdtf.format(cal.getTime()));
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
System.out.println("Uhr wurde gestoppt !!!");
}
public void stopThread(){
running = false;
try {
this.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Code:
public class Thread1 extends Thread{
private boolean running = true;
public void run(){
while(running){
System.out.println("Ich bin der Thread1");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
System.out.println("Thread1 wurde gestoppt !!!");
}
public void stopThread(){
running = false;
try {
this.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Code:
public class MyMain {
public static void main(String[] args) throws InterruptedException {
ClockThread ct = new ClockThread();
Thread1 t1 = new Thread1();
ct.start();
t1.start();
Thread.sleep(10000);
ct.stopThread();
Thread.sleep(5000);
t1.stopThread();
}
}
Wir erzeugen zwei Threads und starten diese beiden. Nach 10000ms wird dann der UhrenThread gestoppt und 5000ms später der andere. Hier ist aber noch nix synchronisiert. Aber ich denke das kleine Beispiel hilft dir, bei der Frage...