/ 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
Starte en bestemt tråd efter wait()
Fra : Henrik Stidsen


Dato : 08-09-04 13:53

Er det muligt at "genstarte" en bestemt tråd efter den er sat i
wait() tilstand ?

Jeg kender godt til notify osv, men der har jeg ingen kontrol over
hvilken tråd det er der startes.

--
..: Henrik Stidsen - http://hs235.dk/ - http://hs235.dk/blog/ ::...
"Nogen gange kan ens liv godt føles som et puslespil, hvor brikkerne
bevæger sig og skifter farve og størrelse når man rører dem."
- Emme, http://emme.dk/2003_11_01_arkiv.html#106840650828914899

 
 
Kristian Thy (08-09-2004)
Kommentar
Fra : Kristian Thy


Dato : 08-09-04 14:11

Henrik Stidsen uttered:
> Er det muligt at "genstarte" en bestemt tråd efter den er sat i
> wait() tilstand ?

Nej.

\\kristian
--
http://lpf.ai.mit.edu/Patents/knuth-to-pto.txt

Henrik Stidsen (08-09-2004)
Kommentar
Fra : Henrik Stidsen


Dato : 08-09-04 17:14

Kristian Thy <thy@it.edu> wrote in news:2q8ennFs9i89U1@uni-berlin.de

>> Er det muligt at "genstarte" en bestemt tråd efter den er sat i
>> wait() tilstand ?

> Nej.

Dvs. man skal lave sin egen thread-handling ?

Nogen ideer til hvordan man hurtigt og nemt implementerer en kø så
man kan sikre rækkefølgen ?

--
..: Henrik Stidsen - http://hs235.dk/ - http://hs235.dk/blog/ ::...
"Nogen gange kan ens liv godt føles som et puslespil, hvor brikkerne
bevæger sig og skifter farve og størrelse når man rører dem."
- Emme, http://emme.dk/2003_11_01_arkiv.html#106840650828914899

Jonas Kongslund (08-09-2004)
Kommentar
Fra : Jonas Kongslund


Dato : 08-09-04 19:22

On Onsdag den 8. september 2004 14:52, Henrik Stidsen wrote:

> Er det muligt at "genstarte" en bestemt tråd efter den er sat i
> wait() tilstand ?
>
> Jeg kender godt til notify osv, men der har jeg ingen kontrol over
> hvilken tråd det er der startes.

Hvilket problem kræver dette?

--
Jonas Kongslund

Henrik Stidsen (08-09-2004)
Kommentar
Fra : Henrik Stidsen


Dato : 08-09-04 23:11

Jonas Kongslund <dont@mail.me.at.all> wrote in
news:u5I%c.3633$dM6.3028@news.get2net.dk

>> Er det muligt at "genstarte" en bestemt tråd efter den er sat i
>> wait() tilstand ?

>> Jeg kender godt til notify osv, men der har jeg ingen kontrol over
>> hvilken tråd det er der startes.

> Hvilket problem kræver dette?

At jeg gerne vil have kontrol over hvilken tråd der startes hvornår,
f.eks. fordi de skal ligge i en "ventekø", f.eks. en FIFO kø - og så
ville det jo være rart at kunne starte en bestemt tråd.

--
..: Henrik Stidsen - http://hs235.dk/ - http://hs235.dk/blog/ ::...
Nerd is a word only used by those who can’t pronounce ’Intellectual’.
- http://query.dk/permlink.php?link=1058129898

Jonas Kongslund (08-09-2004)
Kommentar
Fra : Jonas Kongslund


Dato : 08-09-04 23:34

On Torsdag den 9. september 2004 00:11, Henrik Stidsen wrote:
> At jeg gerne vil have kontrol over hvilken tråd der startes hvornår,
> f.eks. fordi de skal ligge i en "ventekø", f.eks. en FIFO kø - og så
> ville det jo være rart at kunne starte en bestemt tråd.

Det besvarede ikke rigtigt mit spørgsmål. Jeg forstår godt, hvad du vil
have, men hvad vil du anvende det til? Det er lettere at komme med forslag
til (alternative) løsninger når man kender til brugskonteksten...

--
Jonas Kongslund

Henrik Stidsen (09-09-2004)
Kommentar
Fra : Henrik Stidsen


Dato : 09-09-04 13:05

Jonas Kongslund <dont@mail.me.at.all> wrote in
news:hNL%c.6532$jb3.4523@news.get2net.dk

>> At jeg gerne vil have kontrol over hvilken tråd der startes
>> hvornår, f.eks. fordi de skal ligge i en "ventekø", f.eks. en
>> FIFO kø - og så ville det jo være rart at kunne starte en
>> bestemt tråd.

> Det besvarede ikke rigtigt mit spørgsmål. Jeg forstår godt, hvad
> du vil have, men hvad vil du anvende det til? Det er lettere at
> komme med forslag til (alternative) løsninger når man kender til
> brugskonteksten...

Lige det konkrete problem er noget prioritering i en reader-writer
problemløsning. Det er en skoleopgave så der er ikke meget mere i
det.

Selve reader-writer løsningen virker fint men vi forsøger at finde
den smarteste måde at priorieter f.eks. writers over readers og der
havde vi bl.a. overvejet at lave to køer hvor de sættes i og står i
wait tilstand til det bliver deres tur og de vækkes til live - og så
ville det jo være smart hvis man kunne vække den tråd der står
forrest istedet for man skal vække dem alle og så waite dem alle
indtil man står med den tråd man skal bruge.

--
..: Henrik Stidsen - http://hs235.dk/ - http://hs235.dk/blog/ ::...
"Alot of people may not know this but I happen to be quite famous"

Filip Larsen (09-09-2004)
Kommentar
Fra : Filip Larsen


Dato : 09-09-04 17:20

Henrik Stidsen skrev

> Lige det konkrete problem er noget prioritering i en reader-writer
> problemløsning. Det er en skoleopgave så der er ikke meget mere i
> det.
>
> Selve reader-writer løsningen virker fint men vi forsøger at finde
> den smarteste måde at priorieter f.eks. writers over readers og der
> havde vi bl.a. overvejet at lave to køer hvor de sættes i og står i
> wait tilstand til det bliver deres tur og de vækkes til live - og så
> ville det jo være smart hvis man kunne vække den tråd der står
> forrest istedet for man skal vække dem alle og så waite dem alle
> indtil man står med den tråd man skal bruge.

Det kan man også godt. Sæt fx. et låseobjekt i en kø og vent på det
indtil det står forrest. Når arbejdet er færdigt fjernes forreste lås og
næste lås notify'es. Hvis låseobjektet gøres trådlokalt kan man endda
nemt undgå dead-lock ved "reentrante" kald. Alt dette kan implementeres
på 60-70 enkle linier uden kommentarer.


Mvh,
--
Filip Larsen



Henrik Stidsen (09-09-2004)
Kommentar
Fra : Henrik Stidsen


Dato : 09-09-04 23:43

"Filip Larsen" <filip.larsen@nospam.dk> wrote in
news:chpvvu$1ssl$1@news.cybercity.dk

> Det kan man også godt. Sæt fx. et låseobjekt i en kø og vent på
> det indtil det står forrest. Når arbejdet er færdigt fjernes
> forreste lås og næste lås notify'es. Hvis låseobjektet gøres
> trådlokalt kan man endda nemt undgå dead-lock ved "reentrante"
> kald. Alt dette kan implementeres på 60-70 enkle linier uden
> kommentarer.

Det lyder for avanceret til at jeg gider implementere det til dette
projekt - men godt nok at vide at det er en reel mulighed for det
bliver garanteret nødvendigt senere :/

Kunne man ikke lave en udgave af Thread klassen hvor f.eks. wait();
køres med en fifo kø så den der har ventet længst altid vil komme
først igang ?

--
..: Henrik Stidsen - http://hs235.dk/ - http://hs235.dk/blog/ ::...
http://såkadulæredet.dk/ => http://xn--skadulredet-x8as.dk/

Martin Husted Hartvi~ (09-09-2004)
Kommentar
Fra : Martin Husted Hartvi~


Dato : 09-09-04 10:31

On 08 Sep 2004 22:11:06 GMT, Henrik Stidsen <nospamforme@hs235.dk> wrote:

> Jonas Kongslund <dont@mail.me.at.all> wrote in
> news:u5I%c.3633$dM6.3028@news.get2net.dk
>
>>> Er det muligt at "genstarte" en bestemt tråd efter den er sat i
>>> wait() tilstand ?
>
>>> Jeg kender godt til notify osv, men der har jeg ingen kontrol over
>>> hvilken tråd det er der startes.
>
>> Hvilket problem kræver dette?
>
> At jeg gerne vil have kontrol over hvilken tråd der startes hvornår,
> f.eks. fordi de skal ligge i en "ventekø", f.eks. en FIFO kø - og så
> ville det jo være rart at kunne starte en bestemt tråd.
>

Hvis du taler om at pause en tråd for så senere at fortsætte dens
handling, kan det saggens lade sig gøre, du kan evt se mere på
http://java.sun.com/docs/books/tutorial/essential/threads/index.html.

Du kunne lave noget ligende, hvis du har en collection med dine tråde:

Obejct object;

for (Iterator iterator = collection.iterator(); iterator.hasNext();)
{
object = iterator.next();

try
{
synchronized (object)
{
object.notify();
}
...
...
...
    synchronized (object)
{
object.wait();
}
}
catch (IllegalMonitorStateException e)
{
e.printStackTrace();
}
}



Du kan også sætte tråden til selv at sætte sig i wait i run metoden, ala:


public void run()
{
while (true)
{
System.out.println("bla...bla.."); // hvad den nu skal lave....

try
{
synchronized (this)
{
wait();
}
}
catch (IllegalMonitorStateException e)
{
e.printStackTrace();
}
}
}


Hilsen
Martin

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

Månedens bedste
Årets bedste
Sidste års bedste