Groups | Search | Server Info | Keyboard shortcuts | Login | Register
Groups > comp.lang.java.programmer > #4864
| From | Tom Anderson <twic@urchin.earth.li> |
|---|---|
| Newsgroups | comp.lang.java.programmer |
| Subject | Re: Making one or more threads wait for another to produce a value or fail |
| Date | 2011-06-01 22:07 +0100 |
| Organization | Stack Usenet News Service |
| Message-ID | <alpine.DEB.2.00.1106011232170.3055@urchin.earth.li> (permalink) |
| References | <alpine.DEB.2.00.1105311443530.28134@urchin.earth.li> <HMGdndl85vc2annQnZ2dnUVZ_t2dnZ2d@posted.palinacquisition> <alpine.DEB.2.00.1105311622310.14714@urchin.earth.li> <LIudnSEjsK5AKHjQnZ2dnUVZ_oWdnZ2d@posted.palinacquisition> |
[Multipart message — attachments visible in raw view] - view raw
On Tue, 31 May 2011, Peter Duniho wrote: > On 5/31/11 8:46 AM, Tom Anderson wrote: >> On Tue, 31 May 2011, Peter Duniho wrote: >> >>> On 5/31/11 7:00 AM, Tom Anderson wrote: >>> >>>> A Future<Verdict> looks ideal - it provides synchronisation, and a >>>> value, and provides the same value to all requesters once it's >>>> delivered, and also handles failure and cancellation. But i don't see >>>> an easy way to make one for a simple value. There is FutureTask, but >>>> that seems more geared to wrapping Callable and Runnable. >>>> >>>> Any suggestions? >>> >>> Personally, I'd just use the Object.wait() and Object.notifyAll() >>> methods. >> >> That probably is good enough. There are some subtleties: one has to be >> aware of the possibility of spurious wakeup, and guard the wait() with >> a suitable test; one has to think a bit about ensuring a happens-before >> relationship between the setting of the result or exception variables >> and their reading; > > Spurious wakeup, yes (why people continue to tolerate that in Java, I have no > idea…plenty of other APIs with concurrency support don't have that trouble). > > Happens-before/after, should come directly from a correct use of the wait() > and notifyAll() methods. Or volatile. Working out when you can use each is one of the challenges. > In particular, as long as you ensure that the writer doesn't get to > arrive at its "synchronized" statement in which it will call notify() > until after all the readers have arrived at their wait() statement, > you're assured all the readers will see the new value. That is true, but that's a more stringent requirement than is needed: the happens-before relationship is between the writer's lock release, and the reader's lock acquisition. The reader's prospective wait must be inside a synchronized block, so even if a reader arrives at its wait statement long after the writer has called notify() (and unlocked) its lock acquisition will mean the writer's actions will have happened-before that moment. I imagine you knew that, of course, and we're talking slightly at cross-purposes. > Alternatively, maintain a separate "do I really need to wait?" flag that > is cleared when the delivered value is set, so that readers don't bother > waiting if the value's already been updated. Yes. Which you need anyway, to deal with the spurious wakeups! tom -- That must be one of the best things you can possibly do with a piglet, booze and a cannon. -- D
Back to comp.lang.java.programmer | Previous | Next — Previous in thread | Next in thread | Find similar
Making one or more threads wait for another to produce a value or fail Tom Anderson <twic@urchin.earth.li> - 2011-05-31 15:00 +0100
Re: Making one or more threads wait for another to produce a value or fail Peter Duniho <NpOeStPeAdM@NnOwSlPiAnMk.com> - 2011-05-31 07:14 -0700
Re: Making one or more threads wait for another to produce a value or fail Tom Anderson <twic@urchin.earth.li> - 2011-05-31 16:46 +0100
Re: Making one or more threads wait for another to produce a value or fail Deeyana <d.awlberg@hotmail.invalid> - 2011-05-31 19:23 +0000
Re: Making one or more threads wait for another to produce a value or fail Tom Anderson <twic@urchin.earth.li> - 2011-06-01 22:12 +0100
Re: Making one or more threads wait for another to produce a value or fail Peter Duniho <NpOeStPeAdM@NnOwSlPiAnMk.com> - 2011-05-31 20:45 -0700
Re: Making one or more threads wait for another to produce a value or fail Patricia Shanahan <pats@acm.org> - 2011-05-31 21:37 -0700
Re: Making one or more threads wait for another to produce a value or fail Peter Duniho <NpOeStPeAdM@NnOwSlPiAnMk.com> - 2011-06-01 07:18 -0700
Re: Making one or more threads wait for another to produce a value or fail Patricia Shanahan <pats@acm.org> - 2011-06-01 09:01 -0700
Re: Making one or more threads wait for another to produce a value or fail Lawrence D'Oliveiro <ldo@geek-central.gen.new_zealand> - 2011-06-01 16:40 +1200
Re: Making one or more threads wait for another to produce a value or fail "John B. Matthews" <nospam@nospam.invalid> - 2011-06-01 11:22 -0400
Re: Making one or more threads wait for another to produce a value or fail Lawrence D'Oliveiro <ldo@geek-central.gen.new_zealand> - 2011-06-02 10:15 +1200
Re: Making one or more threads wait for another to produce a value or fail "John B. Matthews" <nospam@nospam.invalid> - 2011-06-01 21:38 -0400
Re: Making one or more threads wait for another to produce a value or fail Tom Anderson <twic@urchin.earth.li> - 2011-06-01 22:07 +0100
Re: Making one or more threads wait for another to produce a value or fail Peter Duniho <NpOeStPeAdM@NnOwSlPiAnMk.com> - 2011-06-01 22:46 -0700
Re: Making one or more threads wait for another to produce a value or fail markspace <-@.> - 2011-05-31 08:26 -0700
Re: Making one or more threads wait for another to produce a value or fail Tom Anderson <twic@urchin.earth.li> - 2011-05-31 19:13 +0100
Re: Making one or more threads wait for another to produce a value or fail Patricia Shanahan <pats@acm.org> - 2011-05-31 09:06 -0700
Re: Making one or more threads wait for another to produce a value or fail Paul Cager <paul.cager@googlemail.com> - 2011-05-31 10:08 -0700
Re: Making one or more threads wait for another to produce a value or fail Patricia Shanahan <pats@acm.org> - 2011-05-31 10:39 -0700
Re: Making one or more threads wait for another to produce a value or fail Paul Cager <paul.cager@googlemail.com> - 2011-05-31 16:24 -0700
Re: Making one or more threads wait for another to produce a value or fail Lawrence D'Oliveiro <ldo@geek-central.gen.new_zealand> - 2011-06-01 12:33 +1200
Re: Making one or more threads wait for another to produce a value or fail "John B. Matthews" <nospam@nospam.invalid> - 2011-06-01 00:38 -0400
Re: Making one or more threads wait for another to produce a value or fail markspace <-@.> - 2011-06-02 14:10 -0700
Re: Making one or more threads wait for another to produce a value or fail markspace <-@.> - 2011-06-02 14:25 -0700
Re: Making one or more threads wait for another to produce a value or fail Patricia Shanahan <pats@acm.org> - 2011-06-02 14:43 -0700
csiph-web