Avatar billede tl Nybegynder
17. oktober 2001 - 17:09 Der er 7 kommentarer og
1 løsning

Tråde i Java.

Hvordan kan man bedst starte og stoppe en tråd i java ?

Metoden stop() er deprecicated og er en tråd først stoppet vil den aldrig kunne køre igen.

Avatar billede mipe1 Nybegynder
17. oktober 2001 - 17:46 #1
kan du ikke bruge wait() ?
Avatar billede mipe1 Nybegynder
17. oktober 2001 - 17:52 #2
godt være jeg var lidt for hurtig, wait, venter vist på at blive notificeret, men er det ikke sleep du leder efter.

i api referencen er der et link til en forklaring på problemet:
http://java.sun.com/j2se/1.4/docs/guide/misc/threadPrimitiveDeprecation.html

API:
http://java.sun.com/j2se/1.4/docs/api/index.html

tutorial om tråde:
http://web2.java.sun.com/docs/books/tutorial/essential/threads/index.html

Ja du burde kunne finde svaret i blandt dette.

Men hvis det er en hel konkret problemstilling som du har problemer med, så sig til
Avatar billede mipe1 Nybegynder
17. oktober 2001 - 17:54 #3
nå ja og for en ordens skyld:
<snip>
sleep
public static void sleep(long millis)
                  throws InterruptedException
Causes the currently executing thread to sleep (temporarily cease execution) for the specified number of milliseconds. The thread does not lose ownership of any monitors.

Parameters:
millis - the length of time to sleep in milliseconds.
Throws:
InterruptedException - if another thread has interrupted the current thread. The interrupted status of the current thread is cleared when this exception is thrown.
See Also:
Object.notify()

</snip>
Avatar billede soren112 Nybegynder
17. oktober 2001 - 18:26 #4
Mine tråd loops ser ca. sådan her ud:

public void run(){
while(running){
  doStuff();
}
}

så er det bare at sætte running til false så vil tråden dø.

Mvh
Søren Olesen
Avatar billede logical Nybegynder
17. oktober 2001 - 20:23 #5
Det bør altid være tråden selv, der afgør, at den er færdig. Der er flere måder at signalere at man er færdig på. Hvis du vil have et helt færdigt eksempel, så kig på følgende eksempel:

public class Lyssignal {
    private String name;
    private volatile Thread worker = null;
    private Sekvens sekvens = new Sekvens();
   
    private class Sekvens implements Runnable {
        private String[] colors = { \"Rød\", \"Rød/Gul\", \"Grøn\", \"Gul\" };
        private int[] delays = { 1000, 300, 1200, 500 };
       
        public void run() {
            int farve = 0;
            Thread t = Thread.currentThread();
            while(worker == t) {
                System.out.println(name + \" : \" + colors[farve]);
                try {
                    Thread.sleep(delays[farve]);
                } catch (InterruptedException e) {
                    // Let me sleep alone, please.
                    e.printStackTrace(System.err);
                }
                farve = (farve+1) % colors.length;
            }
            System.out.println(name + \" stoppet, viser \" + colors[0]);
        }
       
    }
   
    public Lyssignal(String name) {
        this.name = name;
    }
   
    public void start() {
        worker = new Thread(sekvens);
        worker.start();
    }
   
    public void stop() {
        worker = null;
    }
   
}

Et Lyssignal har en indre klasse sekvens, som man starter og stopper gennem Lyssignalet. Den indre klasser kender den tråd, der startede den, og hvis det ændres, stopper den. Der er løsning på mange problemer i det her eksempel.
Avatar billede powerbart Nybegynder
04. november 2001 - 01:11 #6
Kig også på join(sec.)

Den bevirker at moder-tråden, fortæller at \'barnet\' skal (dø/blive færdig) _inden_ x sec.


Avatar billede logical Nybegynder
04. november 2001 - 08:50 #7
powerbart>>


t.join(x) betyder, at kørende tråd venter på at t \"joiner\" ind, dvs. vi venter x millis på at t bliver færdig, og derefter fortsætter vi uanset om t blev færdig eller ej.
Avatar billede tl Nybegynder
30. november 2001 - 13:33 #8
her er en kommentar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester