<div><div style><span style="background-color:transparent">On Sat, Apr 21, 2012 at 12:08 PM, Aleksey Shipilev </span><span style="background-color:transparent">wrote:</span></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<div class="im">Yes. SettableFuture-like class is something missing from concurrent</div>classes I'm redoing over and over again in most of the projects.<br>Implementing it directly on top of AQS might provide some benefits<br>
comparing to extending from FutureTask? Oh wait, it smells like another<br>API enhancement proposal? :)<br></blockquote><div><br></div><div>Alex,</div><div><br></div><div>Bill Pugh once suggested a separate concurrency abstraction: an externally settable FutureValue<V>, which supports the following methods:</div>
<div><br></div><div style>       V get() -  Waits if necessary for the value to be <span style="background-image:initial;background-color:rgb(255,255,204)">set</span>, and then returns the value.</div><div style>       boolean isDone() - Returns true if the value is <span style="background-image:initial;background-color:rgb(255,255,204)">set</span></div>
<div style>       boolean <span style="background-image:initial;background-color:rgb(255,255,204)">set</span>(V v) - Sets the value if it was not already <span style="background-image:initial;background-color:rgb(255,255,204)">set</span>.</div>
<div style>               Returns true if the value was <span style="background-image:initial;background-color:rgb(255,255,204)">set</span> by this call, false if it</div><div style>               was <span style="background-image:initial;background-color:rgb(255,255,204)">set</span> by another call.</div>
<br class="Apple-interchange-newline"><div>Having set(v) return a boolean seems like a good idea.  What do you think?</div><div><br></div><div>To this I would also add the other Future methods such as cancel(), plus setException().  In other words, I envision FutureValue as a Future with two additional methods: boolean set(v) and boolean setException(e).</div>
<div><br></div><div>Are there any other Future enhancements that you think are sorely needed in j.u.c.?</div><div><br></div><div>--Joe</div><br class="Apple-interchange-newline"></div></div>