Avatar billede petersss Nybegynder
11. februar 2004 - 20:20 Der er 7 kommentarer og
2 løsninger

Hvordan lukkes en Thread?

Jeg har et objekt der extender Thread. Når run() proceduren er færdig skal Threaden stoppes, og alle objektets variable skal fjernes, da der hele tiden oprettes nye Threads.
Avatar billede arne_v Ekspert
11. februar 2004 - 20:24 #1
Umiddelbart vil jeg da tro at objekter bliver garbage collectet normalt når der
ikke længere er referancer til det.
Avatar billede dsj Nybegynder
11. februar 2004 - 20:26 #2
Det er rigtigt. Når en Thread-instans' run-metode løber ud, dør tråden og fjernes af garbage collectoren.
Avatar billede petersss Nybegynder
11. februar 2004 - 20:41 #3
dvs. alle objekter i threaden som jeg ikke har passet videre ved funktionskald fjernes, mens de andre lever videre i de pågældende funktioner udenfor threaden?
Avatar billede arne_v Ekspert
11. februar 2004 - 20:42 #4
Normale GC regler. Når der ikke er en referance til et objekt bliver det GC'et.
Avatar billede arne_v Ekspert
11. februar 2004 - 20:45 #5
Du kan iøvrigt prøve at køre dette lille eksempel:

public class TGC {
    public static void main(String[] args) throws Exception {
        for(int i = 1; i <= 10000; i++) {
            Thread t = new T();
            t.start();
            t.join();
            t = null;
            if((i % 100) == 0) {
                if((i % 1000) == 0) {
                    System.out.print(T.n + " -> ");
                    System.gc();
                    System.out.println(T.n);
                } else {
                    System.out.println(T.n);
                }
            }
        }
    }
}

class T extends Thread {
    static int n = 0;
    public T() {
        n++;
    }
    public void run() {
    }
    protected void finalize() {
        n--;
    }
}
Avatar billede arne_v Ekspert
06. marts 2004 - 15:44 #6
Lukke tid ?
Avatar billede arne_v Ekspert
06. marts 2004 - 15:44 #7
Og et svar
Avatar billede dsj Nybegynder
06. marts 2004 - 22:20 #8
Vær opmærksom på at ustartede tråde ALDRIG garbage collecters, heller ikke selvom alle reference fjernes. Derfor bør Threads aldrig instantieres, uden at de samtidig startes.
Avatar billede dsj Nybegynder
06. marts 2004 - 22:22 #9
Threads bør dermed heller ikke holde nogen referencer uden at blive startet. Hvis en tråd aldrig startes og holder referencer til objekter, vil disse objekter dermed heller aldrig blive garbage collected, og en alvorlig memory-leak er følgen.
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