24. november 2001 - 12:12
Der er
1 løsning
Tråde
Hejsa alle sammen...
Jeg har et problem med nogle tråde. Jeg opretter først et objekt af HomeBankingThread (som implementerer \"Runnable\")...
home1 = new HomeBankingThread(\"nr1\");
Derefter laver jeg den til en tråd...
Thread phil1 = new Thread(home1);
og starter den...
phil1.start();
Mit problem er så at jeg ikke ved hvordan jeg sætter tråden til at sove(sleep()), eller kalder getName(), når jeg ikke får tråden med som parameter i run()-metoden i HomeBankingThread-klassen.
Er der nogle der har en løsning på dette, uden at jeg \"extender\" Thread i HomeBankingThread-klassen. For jeg skal bruge muligheden til at extende andre klasser i denne klasse.
På forhånd tak.
24. november 2001 - 12:22
#1
Du kan ikke sætte en anden tråd til at sove, du kan kun sætte dig selv til at sove ved at bruge den statiske metode Thread.sleep(x);
Hvis du vil have andre til at sove, skal det gøres på en anden måde, eksempelvis:
Lave en metode i din klasse, hvor du kan sætte en boolean til true, når du ønsker at sove:
public synchronized void requestSleep(sleepTime) {
this.sleepRequested = true;
this.sleepTime = sleepTime;
this.RequestTime = System.currentTimeMillis();
}
in kørende tråd skal så med jævne mellemrum checke om den er sat, og så sove, f.eks. fra en run metode:
public void run() {
doSomething();
checkSleep();
doSomethingOther();
checkSleep();
...
}
CheckSleep skulle så se sådan her ud:
private synchronized void checkSleep() {
if (!sleepRequested) return;
sleepRequest = false;
long since = System.currentTimeMillis() - this.requestTime();
try { Thread.sleep(sleepTime-since); } catch (InterruptedException e) {}
}
Mht. at genkende din tråd.. Se nedenfor:
public class HomeBankingThread implements Runnable {
private Thread owner = null;
public void run() {
owner = Thread.currentThread(); // Hvem kører denne metode?
}
}