Avatar billede tigtak Nybegynder
24. april 2002 - 10:28 Der er 5 kommentarer og
1 løsning

tråde - interface Runnable

Jeg har et objekt der implementerer Runnable interface. Start metoden ser således ud:
public void start()
{
    Thread thread = new Thread(this);
    try
        {
            thread.start();
           
        }
        catch (Exception e) {}
    }
Jeg arver ikke fra Thread, hvordan kan jeg så slette/stoppe tråden
Avatar billede kresten Nybegynder
24. april 2002 - 10:30 #1
Med stop() som skal se sådan ud

public void stop() {
  thread = null;
}

Men du skal heller ikke have linien
Thread thread = new Thread(this); inde i din start metode. Definer den i klassen som en attribut.
Avatar billede tigtak Nybegynder
24. april 2002 - 10:36 #2
kresten>> jeg er idiot, du er en stjerne
Avatar billede kresten Nybegynder
24. april 2002 - 10:36 #3
Pjat, vi skal alle starte et sted :-]
Avatar billede carstenknudsen Nybegynder
24. april 2002 - 11:59 #4
Det er meget tvivlsomt at det skulle have nogen
virkning. At sætte thread = null stopper ikke tråden
det betyder bare at man ikke har håndtag i den
længere. Mht. stop metoden er den ikke påkrævet
i Runnable og er iøvrigt deprecated og bør under
ingen omstændigheder bruges. Den eneste pæne
måde at stoppe en tråd på er at lave en ny klasse
der ser ud som f.eks. her: Tråde der nedarver fra
denne klasse skal så sørge for checke shouldStop
metoden jævnligt i sin run metode og hvis den er
blevet bedt om at stoppe skal den stoppe pænt.
public abstract class StoppableThread extends Thread  {
private boolean stop = false;
public void pleaseStop()  {
stop = true;
}
public synchronized boolean shouldStop() {
return stop;
}
}
Avatar billede kresten Nybegynder
24. april 2002 - 12:34 #5
carsten> Så sandt så sandt, men hvis jeg sætter den til null vil den jo dø på et eller andet tidpunkt pga garbage collection.
Avatar billede carstenknudsen Nybegynder
24. april 2002 - 13:35 #6
Nej det vil den bestemt ikke, sålænge run metoden
ikke returnerer vil tråden fortsætte med at leve.
Om du har en reference til tråden er helt irrelevant.
Nedenstående anonyme tråd vil eksistere for evigt,
eller indtil den virtuelle maskine lukkes ned af
et System.exit(.) kald. Iøvrigt vil det være en
uhørt at stoppe noget på ved at vente på garbage
collection da du ingen garanti har for at det nogensinde
sker, der findes formentlig VM der ikke har en gc!
new Thread(new Runnable(() {
public void run() {
while ( 1 ==  1 ) {
}
}
}).start();
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