Avatar billede hulla Novice
27. maj 2001 - 09:08 Der er 4 kommentarer og
1 løsning

længden af en java tråd ??

Hvordan bestemmer jeg hvor lang tid en tråd skal holdes igang og hvordan afbryder jeg den før tid?
Avatar billede logical Nybegynder
27. maj 2001 - 09:27 #1
En tråd ekskverer for længden af dens run() metode.

Når run() metoden stopper, stopper tråden, hvis run() metoden fortsætter, fortsætter tråden.

Et eksempel på en run:

public void run() {
  while(isRunning) { // Some boolean value denotifying that we should continue to run
    doTask(); // tedious task
    try {
      Thread.sleep(10): // if necessary
    } catch (InterruptedException e) {}
  }
}


Når man ikke gider mere, sættes isRunning til false, og run() metoden vil så afslutte
Avatar billede hulla Novice
27. maj 2001 - 09:30 #2
hvad så hvis jeg vil have tråden til at løbe i f.eks. 2 min og så stoppe af sig selv, men samtidig have mulighed for at afbryde den manuelt ??
Avatar billede hulla Novice
27. maj 2001 - 09:33 #3
og hvad er det der gør denne while løkke til en tråd ?
Avatar billede logical Nybegynder
27. maj 2001 - 09:47 #4
Der er intet i while løkken, der gør den til en tråd, men du spurgte heller ikke om hvordan man lavede en tråd.

En tråd eksekverer klassens (eller dens targets) run() metode, og når den er færdig stoppes udførslen.

Hvis du gerne vil have en tråd, hvor den kører enten i to minutter, eller indtil den bliver afbrudt, kan logikken se sådan ud (bemærk, jeg skriver kun run() metoden, ikke hele klassen og ikke alt trådspecifikt.):

public void run() {
  long now = System.currentTimeMillis();
  long slutTime = 2 * 60 * 1000 + now;

  while((slutTime > now) && isRunning)) {
    doTask();
   
    now = System.currentTimeMillis();
  }
}

I udførslen måler vi på tiden med jævne mellemrum, og hvis den er mere end to minutter senere end vi startede, terminerer vi. Bemærk, den kører minimum 2 minutter.


Hvis det er et ufravigeligt krav, at den max må køre 2 minutter, skal du lave det anderledes, nemlig starte en tråd, vente 2 minutter, og derefter afbryde den. Men hvis du samtidig vil arbejde, skal du have en tråd til at starte den tråd.

public void run() {
Thread t = new Thread(someTarget);
t.start();
try {
  Thread.sleep(2*60*1000);
} catch (InterruptedException e) {}
t.stop();  // Deprecated, but functioning.
}
Avatar billede hulla Novice
27. maj 2001 - 09:56 #5
Tak logical, du har været en stor hjælp !!!
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