/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
tråde, wait og notifyAll...
Fra : Morten Olsson


Dato : 08-05-01 09:46

Hej folkens,

jeg er pt. i gang med et projekt (3. sem. datamatiker) omhandlende tråde i
java.
I den forbindelse har jeg en mængde tråde som forsøger at bruge en "Feature"
som
har en max-antal for samtidige brugere... mellem tråden og "Feature" ligger
en "FEntry"
som er en prioriteret kø.... Når en tråd er færdig med at bruge en Feature
bliver notifyAll()
kaldt fra FEntry, og næste tråd sendes afsted til Feature...

Mit spørgsmål går på hvad der helt specifikt sker med en tråd når den bliver
vækket fra wait()
af en notifyAll()....
-kører tråden den synkroniserede metode igen fra toppen
-eller fortsætter den fra hvor den nu end var (i mit tilfælde en while
sætning) da den blev lagt til
at sove af wait()... ?

Håber min forklaring er bare nogenlund forståelig

Venlig hilsen
Morten Olsson

btw: jeg har inkluderet min enter metode fra FEntry (køen):

public synchronized void enter(Skier skier){

if (!waitingList.contains(skier)){
waitingList.add(skier);
skier.skierStateChange(this, "Fentry");
}

while (!waitingList.getFirst().equals(skier) || !feature.use(skier)) {
try{
skier.wait();
}catch (InterruptedException e) {
System.err.println("Tråd fejl: wait() kald");
}

}
waitingList.remove(skier);
}


--
"Have you taken your happy pill today? Happiness is mandatory."



 
 
Morten Olsson (08-05-2001)
Kommentar
Fra : Morten Olsson


Dato : 08-05-01 10:25

En tilføjelse til spørgsmålet - faktisk en rettelse...

Efter lidt debugging ser det ud til at trådene, når de vækkes af notifyAll()
begynder >forfra< i deres run metode... kan det passe ?????

Morten

--
"Have you taken your happy pill today? Happiness is mandatory."
"Morten Olsson" <dsl23906@vip.cybercity.dk> skrev i en meddelelse
news:9d8bea$282e$1@news.cybercity.dk...
> Hej folkens,
>
> jeg er pt. i gang med et projekt (3. sem. datamatiker) omhandlende tråde i
> java.
> I den forbindelse har jeg en mængde tråde som forsøger at bruge en
"Feature"
> som
> har en max-antal for samtidige brugere... mellem tråden og "Feature"
ligger
> en "FEntry"
> som er en prioriteret kø.... Når en tråd er færdig med at bruge en Feature
> bliver notifyAll()
> kaldt fra FEntry, og næste tråd sendes afsted til Feature...
>
> Mit spørgsmål går på hvad der helt specifikt sker med en tråd når den
bliver
> vækket fra wait()
> af en notifyAll()....
> -kører tråden den synkroniserede metode igen fra toppen
> -eller fortsætter den fra hvor den nu end var (i mit tilfælde en while
> sætning) da den blev lagt til
> at sove af wait()... ?
>
> Håber min forklaring er bare nogenlund forståelig
>
> Venlig hilsen
> Morten Olsson
>
> btw: jeg har inkluderet min enter metode fra FEntry (køen):
>
> public synchronized void enter(Skier skier){
>
> if (!waitingList.contains(skier)){
> waitingList.add(skier);
> skier.skierStateChange(this, "Fentry");
> }
>
> while (!waitingList.getFirst().equals(skier) || !feature.use(skier)) {
> try{
> skier.wait();
> }catch (InterruptedException e) {
> System.err.println("Tråd fejl: wait() kald");
> }
>
> }
> waitingList.remove(skier);
> }
>
>
> --
> "Have you taken your happy pill today? Happiness is mandatory."
>
>



Brian Matzon (08-05-2001)
Kommentar
Fra : Brian Matzon


Dato : 08-05-01 11:35


"Morten Olsson" <dsl23906@vip.cybercity.dk> wrote in message
news:9d8dnf$2acq$1@news.cybercity.dk...
> En tilføjelse til spørgsmålet - faktisk en rettelse...
>
> Efter lidt debugging ser det ud til at trådene, når de vækkes af
notifyAll()
> begynder >forfra< i deres run metode... kan det passe ?????

Nej :)
Se anden besvarelse (news:CUPJ6.13443$T22.1256521@news010.worldonline.dk)

/Brian Matzon



Morten Olsson (09-05-2001)
Kommentar
Fra : Morten Olsson


Dato : 09-05-01 00:03

Hmmmm - så må der være noget ganske alvorligt galt - for mine "sladre
sætninger" fortæller mig at de satans tråde starter "forfra" (altså i deres
run-metode) når de bliver vækker af notifyAll()...

Well - jeg må jo se på det igen senere og finde ud af hvad fanden der
foregår

Tak for hjælpen indtil videre...

Mvh. Morten Olsson

--
"Have you taken your happy pill today? Happiness is mandatory."
"Brian Matzon" <brian@matzon.dk> skrev i en meddelelse
news:oWPJ6.13446$T22.1256777@news010.worldonline.dk...
>
> "Morten Olsson" <dsl23906@vip.cybercity.dk> wrote in message
> news:9d8dnf$2acq$1@news.cybercity.dk...
> > En tilføjelse til spørgsmålet - faktisk en rettelse...
> >
> > Efter lidt debugging ser det ud til at trådene, når de vækkes af
> notifyAll()
> > begynder >forfra< i deres run metode... kan det passe ?????
>
> Nej :)
> Se anden besvarelse (news:CUPJ6.13443$T22.1256521@news010.worldonline.dk)
>
> /Brian Matzon
>
>



Brian Matzon (08-05-2001)
Kommentar
Fra : Brian Matzon


Dato : 08-05-01 11:33

> Mit spørgsmål går på hvad der helt specifikt sker med en tråd når den
bliver
> vækket fra wait()
> af en notifyAll()....
Den fortsætter hvor den slap dvs. kommer ud af wait.

> while (!waitingList.getFirst().equals(skier) || !feature.use(skier)) {
> try{
> skier.wait();
> }catch (InterruptedException e) {
> System.err.println("Tråd fejl: wait() kald");
> }
>
> }
> waitingList.remove(skier);
> }

I dette tilfælde vil den komme ud af wait, hoppe op til din while(...)
løkke,
hoppe ned til remove (hvis while(...) == false).

/Brian Matzon



Søg
Reklame
Statistik
Spørgsmål : 177560
Tips : 31968
Nyheder : 719565
Indlæg : 6408941
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste