Applets und Threads



  • Im Informatikunterricht besprechen wir zur Zeit Java. Im speziellen Applets. Nachdem wir also einige einfache Applets programmiert haben, kamen wir zur Einführung von Threads. Mein Lehrer sagte, dass ein Applet explizit als Thread beendet werden muss, was mir etwas seltsam vorkommt, deshalb wäre es toll, wenn an dieser Stelle jemand Klarheit schaffen könnte.
    Laut meinem Lehrer ist einzig und allein folgende Methode korrekt:

    class Bla extends Applet implements Runnable
    {
    	Thread th;
    
    	public void init( )
    	{
    		th = new Thread( this );		
    	}
    
    	public void stop( )
    	{
    		th.stop( );
    	}
    }
    

    Das mag jetzt nicht ganz korrekt sein, aber es geht mir nur um die Grundidee bei der Sache. Wenn der Thread nicht explizit beendet wird, läuft das Programm dann weiter?

    Danke im Voraus für eure Hilfe.



  • Ja, du musst den Thread explizit beenden, oder, wenn ichs richtig verstehe, kannst du das Verhalten auch mit Thread.setDaemon(boolean) ändern.



  • LeGaN schrieb:

    Ja, du musst den Thread explizit beenden

    Wo hast du das her?

    Lest mal das bzw. gibs deinem Lehrer.
    http://java.sun.com/j2se/1.4.2/docs/guide/misc/threadPrimitiveDeprecation.html



  • Aha, vielen Dank für die Antworten.
    Auf der velinkten Seite wird ja dargelegt, warum man Threads nicht mit Thread.stop( ) beenden sollte. Kann man also daraus schliessen, dass ein Applet nicht speziell beendet werden muss oder gäbe es ( außer der Methode mit dem Thread ) etwa noch eine andere Möglichkeit?



  • dein lehrer hat recht. wenn ein thread nicht von allein terminiert (run methode terminiert) oder wenn du so einen user thread (kein daemon) nicht manuell beendest, rennt er "ewig" weiter. nur der vorschlag, Thread#stop zu verwenden ist nicht gut.

    üblicherweise spendiert man dem runnable (in diesem fall dem applet) ein laufzeit boolean, der bestimmt, ob der thread noch läuft und bei bedarf beendet.

    class Bla extends Applet implements Runnable
    {
        Thread th;
        AtomicBoolean running = new AtomicBoolean( false );
    
        public void init( )
        {
            th = new Thread( this );
            running.set( true );
            th.start();
        }
    
        public void run()
        {
             while( running.get() )
                 // do stuff
        }
    
        public void stop( )
        {
            running.set( false );
            // wenn man warten will, bis der thread wirklich beendet ist
            th.join();
        }
    }
    


  • äh nein schrieb:

    LeGaN schrieb:

    Ja, du musst den Thread explizit beenden

    Wo hast du das her?

    Lest mal das bzw. gibs deinem Lehrer.
    http://java.sun.com/j2se/1.4.2/docs/guide/misc/threadPrimitiveDeprecation.html

    Ich habe nicht geschrieben mit stop() beenden. Hätte ich vlt. hinzufügen sollen, dass man es wie flupp123 machen kann oder mit interrupt().



  • Alles klar! Vielen Dank, dass ihr mir weitergeholfen habt. 🙂


Anmelden zum Antworten