/
Forside
/
Teknologi
/
Udvikling
/
Java
/
Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn
*
Kodeord
*
Husk mig
Brugerservice
Kom godt i gang
Bliv medlem
Seneste indlæg
Find en bruger
Stil et spørgsmål
Skriv et tip
Fortæl en ven
Pointsystemet
Kontakt Kandu.dk
Emnevisning
Kategorier
Alfabetisk
Karriere
Interesser
Teknologi
Reklame
Top 10 brugere
Java
#
Navn
Point
1
molokyle
3688
2
Klaudi
855
3
strarup
740
4
Forvirret
660
5
gøgeungen
500
6
Teil
373
7
Stouenberg
360
8
vnc
360
9
pmbruun
341
10
mccracken
320
Threads og wait
Fra :
Hans Hvelplund Odbor~
Dato :
13-12-00 17:52
hvis man kører wait() i en traad skulle den så ikke stoppe med at køre?
Ulrik Magnusson (
13-12-2000
)
Kommentar
Fra :
Ulrik Magnusson
Dato :
13-12-00 19:07
> hvis man kører wait() i en traad skulle den så ikke stoppe med at køre?
Hvad sker der og hvordan ser koden ud?
Ulrik Magnusson
Hans Hvelplund Odbor~ (
13-12-2000
)
Kommentar
Fra :
Hans Hvelplund Odbor~
Dato :
13-12-00 20:28
TO METODER I KLASSEN TRANSMITTER
public void run()
{
while (okToRun)
{
while (!threadSuspended&&!okToCount)
{
/*do stuff*/
}
try
{
Thread.currentThread().sleep(10);
if (threadSuspended&&okToCount)
{
System.out.println(this+": I've decided to wait");
synchronized (this)
{
while (threadSuspended&&okToCount)
{
wait();
threadSuspended=true;
}
}
}
}
}
public synchronized void switchOn(boolean on)
{
threadSuspended =!on;
okToCount=!on;
if (on)
{
System.out.println(this+": I'm notified");
notify();
}
else
{
System.out.println(this+": I'm sleeping");
}
}
}
DEL AF EN METODEN public void run() I KLASEN NETWORK:
if (/*et eller andet udtryk*/)
{
System.out.println(getTransmitter(c)+": Network is awakeing me");
getTransmitter(c).switchOn(true);
}
else
{
System.out.println(getTransmitter(c)+": Network is suspending me");
getTransmitter(c).switchOn(false);
}
tilsyneladende (efter noget test at lade run() i network gøre ingenting når
/*et eller andet udtryk*/ er true/false) får tråden i klassen Transmitter
en notify() når /*et eller andet udtryk*/ er false og kommandoen
getTransmitter(c).switchOn(false);
uden denne linie bliver objekter af Transmitter ved med at være i wait
med denne linie vågner de efter et stykke tid.
bliver udført
Thomas Sejr Jensen (
13-12-2000
)
Kommentar
Fra :
Thomas Sejr Jensen
Dato :
13-12-00 19:07
Jo. Har du husket try-catch? Og er du sikker på at den ikke kommer i
catch-sætningen, evt. på grund af en IllegalMonitorStateException?
"Hans Hvelplund Odborg" <hhod00@control.auc.dk> skrev i en meddelelse
news:6PNZ5.12025$72.198145@twister.sunsite.auc.dk...
> hvis man kører wait() i en traad skulle den så ikke stoppe med at køre?
>
>
Dennis Thrysøe (
14-12-2000
)
Kommentar
Fra :
Dennis Thrysøe
Dato :
14-12-00 08:18
wait() bruges til at vente på, at det objekt du kalder den på bliver
notified (notify()). Du skal nok nærmere bruke Thread.sleep().
-dennis
Hans Hvelplund Odborg wrote:
> hvis man kører wait() i en traad skulle den så ikke stoppe med at køre?
Hans Hvelplund Odbor~ (
14-12-2000
)
Kommentar
Fra :
Hans Hvelplund Odbor~
Dato :
14-12-00 15:06
men der er ikke noget der hedder sleep() (ja der sleep(....) men jeg ikke
intresseret i at tråden skal kunne vågne af sig selv, når tiden er udløbet)
jeg vil jo have tråden til at "waite" indtil den anden tråd giver besked
N/A (
15-12-2000
)
Kommentar
Fra :
N/A
Dato :
15-12-00 09:04
Morten Nedertoft (
15-12-2000
)
Kommentar
Fra :
Morten Nedertoft
Dato :
15-12-00 09:04
Dennis Thrysøe wrote:
>
> I så fald er wait korrekt. Du laver noget a la:
>
> synchronized (objectToWaitFor){
> objectToWaitFor.wait();
> )
>
> Herefter kalder du bare fra din anden tråd objectToWaitFor.notify() -
> husk at dette objekt kun skal bruges til at synkronizere et sted i dit
> program. Medmindre du har MEGET styr over hvad der sker ;)
Er det da ikke det han (Hans) har lavet?
mvh. Morten N
Dennis Thrysøe (
15-12-2000
)
Kommentar
Fra :
Dennis Thrysøe
Dato :
15-12-00 10:06
Det er muligt. Hvis det ikke virker kunne det så være fordi det object
der ventes på allerede er blevet notified.
Men ret skal være ret - trådprogrammering kan være en ualimndelig stor
hovedpine en gang imellem.
-dennis
Morten Nedertoft wrote:
> Dennis Thrysøe wrote:
>
>
>> I så fald er wait korrekt. Du laver noget a la:
>
>>
>
>> synchronized (objectToWaitFor){
>
>> objectToWaitFor.wait();
>
>> )
>
>>
>
>> Herefter kalder du bare fra din anden tråd objectToWaitFor.notify() -
>
>> husk at dette objekt kun skal bruges til at synkronizere et sted i dit
>
>> program. Medmindre du har MEGET styr over hvad der sker ;)
>
>
>
> Er det da ikke det han (Hans) har lavet?
>
>
>
> mvh. Morten N
Sven Nielsen (
14-12-2000
)
Kommentar
Fra :
Sven Nielsen
Dato :
14-12-00 19:04
In article <6PNZ5.12025$72.198145@twister.sunsite.auc.dk>,
hhod00@control.auc.dk says...
> hvis man kører wait() i en traad skulle den så ikke stoppe med at køre?
Object.wait() kan kun kaldes af en tråd, der er inde i en monitor (dvs.
et "synchronized" område). Herved stopper tråden og monitoren frigives.
Tråden kan først køre igen når en anden tråd har kaldt Object.notify()
eller Object.notifyAll(), eller når tråden får et Thread.interrupt(),
eller hvis Object.wait(long timeout) udløber.
Object.wait() bruges til at sikre korrekthed af flertrådede programmer,
og ikke til at lave pauser i programudførslen. Her skal Thread.sleep(long
millis) bruges.
Med venlig hilsen Sven.
Søg
Alle emner
Teknologi
Udvikling
Java
Indstillinger
Spørgsmål
Tips
Usenet
Reklame
Statistik
Spørgsmål :
177558
Tips :
31968
Nyheder :
719565
Indlæg :
6408929
Brugere :
218888
Månedens bedste
Årets bedste
Sidste års bedste
Copyright © 2000-2024 kandu.dk. Alle rettigheder forbeholdes.