Java Threads

Berlinrider

Ruhestand
Thread Starter
Mitglied seit
21.03.2005
Beiträge
21.799
Hallo!

Ich schreibe am Besten Mal, was ich erreichen will

Code:
public class FirstThread
{
  public static void main( String[] args )
  {
    Thread t1 =   new Thread( new DateCommand() );
        t1.  start();
      Thread t2 =   new Thread( new CounterCommand() );
        t2.  start();
      System.out.println("Hallo!");
    }

}

Er soll "Hallo" ausgeben, sobald beide Threads beendet sind. Macht er aber nicht. :( Er tuts am Anfang.

Wer kann helfen?

Seas&Thx

Chris
 
Wenn Du diese Anzeige nicht sehen willst, registriere Dich und/oder logge Dich ein.
Ja, das tut er, weil alle 3 Threads parallel bearbeitet werden. Daher kommt dann auch das Hallo zuerst (zumindest bei dir, auf andren Rechner kann das ganz anders aussehn).

Damit das geht, wie du willst, musst du imho den Hauptthread drauf warten zu lassen, dass die beiden andren fertig sind.
Aber wie genau das jetzt geht, weiß ich auch nimmer.
 
Danke erstmal. :)
Hatte ich schon befürchtet. Nur verstehe ich nicht warum. Ich dachte zur parallelen Abarbeitung braucht es den Befehl "start".
 
Ja schon, aber t1.start und t2.start. Das bezieht sich ja auf die beiden Klassen DataCommand und CounterCommand.
 
Hallöle,

also nach dieser Seite befindet sich ein Thread im Zustand dead, wenn er abgearbeitet ist.

Probier mal darauf zu reagieren :)

Code:
if (t2.dead)
  System.out.println("Hallo!");

Tut mir leid, dass ich es nicht testen kann, hab grad kein Java zur Hand und Threads wurden bei uns in der Vorlesung nur kurz angerissen ;)

gruß tigger
 
Ja schon, aber t1.start und t2.start. Das bezieht sich ja auf die beiden Klassen DataCommand und CounterCommand.

Meinst du, dass du FirstThread erst per start() starten müsstest?
Nein, bei dem wird laut API alles, was in den "Static public void main(String[] args)" steht automatisch zuerst gestartet ;)
Und natürlich auch parallel, wenns zu was andren sein muss.

@tigger: So ähnlich gings mir auch ;) Eine Vorlesung...
 
t1.join();
t2.join();
aber nur falls t1 & t2 terminieren
 
Code:
if (t2.dead)
  System.out.println("Hallo!");

das ist natürlich Käse, erstens hat man keinen Zugriff auf dead und java hat da schon mitgedacht ;)

@tigger: So ähnlich gings mir auch ;) Eine Vorlesung...

bei uns kam es später in Physik mal nochmal kurz zur Anwendung bei ner Simulation von nem Teilchenflug, aber da war die Thread-Reihenfolge egal :)

@ Berlinrider

wie Heinzelman schon geschrieben hat, musst du noch 2 mal join einbauen, dann müsste dein main warten, bis t1 und t2 abgearbeitet sind und dann sollte das Hallo ausgegeben werden

Code:
public class FirstThread
{
  public static void main( String[] args )
  {
    Thread t1 =   new Thread( new DateCommand() );
        t1.  start();
      Thread t2 =   new Thread( new CounterCommand() );
        t2.  start();
        t1.join();
        t2.join();
      System.out.println("Hallo!");
    }
}

Noch bißchen Theorie dazu gibts hier :p
 
Dickes Dankeschön. :wink:

Probier ich zu Hause nachher gleich mal aus.

PS:

@tigger
Joa, von der Seite habe ich mir das auch beigebracht. Hab das aber wohl überlesen ...
 
Zuletzt bearbeitet:
Code:
public class FirstThread
{
  public static void main( String[] args ) [B]throws InterruptedException[/B]
  {
    Thread t1 =   new Thread( new DateCommand() );
        t1.  start();
      Thread t2 =   new Thread( new CounterCommand() );
        t2.  start();
        t1.join();
        t2.join();
      System.out.println("Hallo!");
    }
}

So gehts. Danke. ;)
 
stimmt, macht auch irgendwie Sinn ne Exception zu werfen ;)

Bei "Java ist nur eine Insel" haben sie dem ganzen ja den schönen Namen Deadlock gegeben :p
 
Nee, Deadlocks sind auch noch was andres, wenn ich mich net irre.
Und zwar, so nen "Schlüssel" den sich ein THread holen kann, um damit auf exklusive Variablen/Methoden alleine zuzugreifen.
Da waren meine Finger mal wieder fauler als mein Kopf :p

Ich meinte eigtl., dass ineinander verschachtelte Threads auf andere Threads warten und sich so gegenseitig blockieren, das war glaub ich ein Deadlock. Und je nachdem wie schlau Java ist, stellt es das fest und wirft ne Exception ;)
 
Sagtmal habt ihr Taleten unter euch nichtmal nach gedacht echt in Second Life zu coden? Dort gehts auch in Java und ist noch einfacher und da werden gute Coder immer gesucht und vom Geld her lohnt es sich echt wenn ihr das so gut könnt.
 
Sagtmal habt ihr Taleten unter euch nichtmal nach gedacht echt in Second Life zu coden? Dort gehts auch in Java und ist noch einfacher und da werden gute Coder immer gesucht und vom Geld her lohnt es sich echt wenn ihr das so gut könnt.
Also ich muss ganz ehrlich sagen, ich kann mir Java nicht merken ;)

bei Delphi geht es, aber Java ist nach 2-3 Wochen, wo ich nichts gemacht habe, so gut wie weggeblasen :)

Außerdem will ich erst mal mein Informatik-Studium beenden, dann seh ich mal weiter :p
 
Sagtmal habt ihr Taleten unter euch nichtmal nach gedacht echt in Second Life zu coden? Dort gehts auch in Java und ist noch einfacher und da werden gute Coder immer gesucht und vom Geld her lohnt es sich echt wenn ihr das so gut könnt.

Ich will tigger und PoWerBaR nicht schlecht machen, also bitte nicht missvertstehen aber Java ist deutlich komplexer als ein paar Exceptions, Threads, etc ... ;)
 
Ich will tigger und PoWerBaR nicht schlecht machen, also bitte nicht missvertstehen aber Java ist deutlich komplexer als ein paar Exceptions, Threads, etc ... ;)
du bist böse zu mir :heul: :fresse:

Ist mir auch klar, dass 2 Semester Java keinen Profi aus mir machen ;)
 
Ich meinte eigtl., dass ineinander verschachtelte Threads auf andere Threads warten und sich so gegenseitig blockieren, das war glaub ich ein Deadlock. Und je nachdem wie schlau Java ist, stellt es das fest und wirft ne Exception ;)

wäre schön wenn java eine exception werfen würde. dann hätte man 99 probleme weniger.
 
Hardwareluxx setzt keine externen Werbe- und Tracking-Cookies ein. Auf unserer Webseite finden Sie nur noch Cookies nach berechtigtem Interesse (Art. 6 Abs. 1 Satz 1 lit. f DSGVO) oder eigene funktionelle Cookies. Durch die Nutzung unserer Webseite erklären Sie sich damit einverstanden, dass wir diese Cookies setzen. Mehr Informationen und Möglichkeiten zur Einstellung unserer Cookies finden Sie in unserer Datenschutzerklärung.


Zurück
Oben Unten refresh