Avatar billede n1ghtmr Nybegynder
15. februar 2005 - 12:12 Der er 12 kommentarer og
1 løsning

Java threads.

Hejsa.

Jeg har lavet en monitor i java der kan skrive/læse fra en database. Det virker fint nok. Nu vil jeg gerne have det sådan at en thread kan sige at den vil vente på at en given værdi bliver skrevet i databasen og så fortsætte når den er skrevet.

Hvordan gør jeg dette uden at låse læse metoden så de andre thread ikke kan komme til?

Mvh. Nmare
Avatar billede arne_v Ekspert
15. februar 2005 - 12:20 #1
Du bruger vel en semafor og lader en tråd vente på den og lader skrive tåden
melde klar når den er færdig.
Avatar billede n1ghtmr Nybegynder
15. februar 2005 - 12:25 #2
Altså:

Inde i læse tråden skal jeg oprette en ny tråd hvis information ikke er der, og i denne lave en semafor som jeg "releaser" hver gang skrive tråden har skrevet en værdi?

Ellers må du lige give lidt kode så jeg kan forstå hvad du mener :)
Avatar billede arne_v Ekspert
15. februar 2005 - 12:29 #3
Fra dit oprindelige spørgsmål:

"en thread kan sige at den vil vente på at en given værdi bliver skrevet i databasen og så fortsætte når den er skrevet"

Mit forslag:

"en thread" venter på at "skrive tråd" releaser semaphor og det gør den
når "given værdi" skrives.

Jeg kan ikke helt se sammenhængen med at læse tråd skal oprette en
ny tråd.
Avatar billede snoop_one Nybegynder
16. februar 2005 - 14:58 #4
Et andet alternativ kunne vel være at oprette en database Broker (med tråd sikre metoder til skrive og læsning af database) og benytte oberver pattern. Så kan tråden vel bare vente (yield()) indtil den er blivet notified af brokeren om at det rigtige data er blevet skrevet i databasen.
Avatar billede arne_v Ekspert
16. februar 2005 - 15:19 #5
Er det ikke ca. sådan at en semafor virker ?
Avatar billede snoop_one Nybegynder
16. februar 2005 - 15:41 #6
jo nøjaktig (eller rettere én semafor kø), men det er bare fordi at java har jo observer pattern'et indbygget i sit klasse bib. så var det måske en nemmere løsning (semaforen skal du selv "bygge")? Og ved en semafor så kaldes den næste tråd (én tråd ad gange), hvorimod en observer så kan alle trådende begynde at køre sammentidigt (de er vel alle læse tråde, så et evt. readers-writers problem skulle ikke opstå)....
Avatar billede snoop_one Nybegynder
16. februar 2005 - 15:47 #7
Undskyld, en tråd kan også starte alle trådende, inde i semafor køen, op samtidigt... så valget ligger vel mellem om man vil bruge observer pattern eller implementere sin egen semafor... (De kan begge det samme).
Avatar billede n1ghtmr Nybegynder
16. februar 2005 - 20:00 #8
Jeg har lavet min egen semafor og brugt den - læg lige et svar så i kan få points.
Avatar billede arne_v Ekspert
16. februar 2005 - 20:30 #9
svar
Avatar billede arne_v Ekspert
16. februar 2005 - 20:31 #10
n1ghtmr>

Hvis du havde spurgt, så har jeg en spemaphor klasse liggende.

[Java 1.5.x har en indbygget !]
Avatar billede snoop_one Nybegynder
17. februar 2005 - 09:37 #11
svar
Avatar billede arne_v Ekspert
25. februar 2005 - 20:24 #12
n1ghtmr>

Tid at acceptere svar ?
Avatar billede snoop_one Nybegynder
10. juni 2005 - 01:23 #13
Lukke tid?
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