Avatar billede jespersahner Nybegynder
02. august 2006 - 21:02 Der er 7 kommentarer og
1 løsning

Brug af Thread.join(time), design-spørgsmål

Ved brug af Thread.join(time) har jeg man ofte brug for at vide, om en tråd afsluttes før time, eller når time nås. Thread.join(time) returnerer imidlertid ikke en status-kode (ville det ikke være oplagt?), så jeg klarer normalt situationen ved at oprette et flag, som default sættes til 'false' ved start af tråden og siden til 'true' umiddelbart inden run() returnerer.

Dette fungerer som udgangspunkt fint nok i det fleste situationer. I andre situationer bruger jeg for at spare kode imidertid en anonym indre klasse:

Thread t=new Thread(new Runnable() {
    public void run() {
        ...
    }
});
t.start();
t.join(time);

Hvordan kan jeg her på samme måde afgøre, om t.join(time) afbryder tråden før time, eller når time nås?

Som jeg ser det, kan jeg ikke uden videre oprette et flag i run(), som kendes uden for den anonyme indre klasse.

Jeg er klar over, at jeg i stedet for kunne oprette en "rigtig" klasse med flag inkluderet i konstruktøren, og jeg kunne sikkert også oprette flag som static, men jeg er overordnet interesseret i, om der er noget design-mæssigt jeg overser her.
Avatar billede arne_v Ekspert
02. august 2006 - 21:12 #1
det paeneste er vel at oprette glaget i den ydre klasse som non static (din
indre anonyme klasse har adgang til det)
Avatar billede arne_v Ekspert
02. august 2006 - 21:12 #2
jeg synes ioevrigt ikke at indre anonyme klasser er paent !
Avatar billede jespersahner Nybegynder
02. august 2006 - 21:12 #3
Blot en korrektion (mest til mig selv): t.join(time) afbryder ikke tråden. Eksekveringen fortsætter efter t.join(time), men tråden kører videre i baggrunden.
Avatar billede jespersahner Nybegynder
02. august 2006 - 21:14 #4
->arne_v: Kræver det ikke, at flaget er final?
Avatar billede jespersahner Nybegynder
02. august 2006 - 21:22 #5
->arne_v: Jeg tror du har ret. Hvis flaget oprettes i den ydre klasse, behøves det ikke være final. Det er kun hvis flaget er lokalt i metoden, at det skal være final. Er det ikke korrekt?
Avatar billede arne_v Ekspert
02. august 2006 - 21:28 #6
det mener jeg

(og final duer ikke)
Avatar billede jespersahner Nybegynder
10. august 2006 - 09:59 #7
->arne_v: Smid gerne et svar.
Avatar billede arne_v Ekspert
10. august 2006 - 13:45 #8
svar
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