Anzeige:
Ergebnis 1 bis 3 von 3

Thema: Initial Thread und invokeLater

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #3
    Registrierter Benutzer Avatar von BlueJay
    Registriert seit
    27.08.2004
    Beiträge
    825
    Soweit mir bekannt ist, sind Initial Thread und Event Dispatcher Thread zwei verschiedene Threads. Das deckt sich mit der Beobachtung, dass Anweisungen wom Initial-Thread und EDT fröhlich durcheinanderlaufen, wenn die Arbeitslisten entsprechend groß sind.

    Mit
    Code:
     public static void checkthread()
     {
        if (javax.swing.SwingUtilities.isEventDispatchThread()) System.out.println("löppt im EDT");
       else System.out.println("löppt nicht im EDT"); 
    }
    lässt sich so was ja schnell herausfinden.

    Das viel propagierte
    invokeLater
    startet den Thread nämlich nicht, wenn der Initial Thread, wie meistens beschrieben, abgelaufen ist, sondern irgendwann, wenn es dazwischenfunken kann. Ausgerechnet bei Sun/Oracle findet man teilweise diese irreführenden Aussagen! Und dann wird nicht erklärt, dass das höchstens so ist, wennd der Initial Thread nix weiter als den EDT anzustoßen hat. Damit ist das Ganze ein Timing-Problem, was meistens gutgeht, aber nur meistens! (ich bin hier mal pingelig!)

    Nun ist es ja so, dass man Methoden schreiben kann, die aus einem Thread irgendeinen Thread ankicken und dann normal weiterlaufen und sich beenden, während der angekickte Thread noch lebt.

    Meine Frage: macht das der Initial Thread auch? Verdrückt er sich, wenn er abgearbeitet ist? Oder behält er die Kontrolle, bis sich hier der später invokte Thread verabschiedet hat? (kriegt eine "Extrawurst" gebraten)

    Für die Praxis heisst das natürlich, dass bei mir der Initial Thread bis auf das Ankicken des EDT nackt bleibt.

    Gruß,
    Ulrike


    Habe inzwischen via Suche nach VM die Lösung bekommen: da hat sich wohl zwischendurch die Architektur geändert. Derzeit ist es so, dass der Initial Thread so lange bestehen bleibt, wie Nicht-Dämon-Threads laufen, und verabschiedet sich erst dann. Er beendet sich sofort, wenn er von einem der Threads ein Exit abbekommt.

    Eventuell gestartete Dämon-Threads laufen nach Verabschieden des Initial Threads weiter. Da der EDT meist nicht als Dämon-Thread gestartet wird, dürfte der Initial Thread wohl die ganze Laufzeit leben.


    d.h., der von anda_skoa vermutete Sachverhalt ist (derzeit?) tatsächlich so.
    Geändert von BlueJay (18-11-2011 um 10:29 Uhr)
    Eigentlich ganz einfach, wenn man's weiss!

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •