RFR 8005696: Add CompletableFuture - JEP 155 (original) (raw)
Chris Hegarty chris.hegarty at oracle.com
Thu Apr 4 15:36:52 UTC 2013
- Previous message: sun.awt.X11 logs still using String + (waste)
- Next message: hg: jdk8/tl/jdk: 8000406: change files using @GenerateNativeHeader to use @Native
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
This is finally ready for integration. Going once... going twice...
Updated webrev and specdiff: http://cr.openjdk.java.net/~chegar/8005696/ver.02/
Doug,
I just finalized the jtreg test, and found a small issue. Please find below a suggested change (included in the webrev), and a small test to demonstrate. Since the jtreg test reproduces the problem, the small test is just for your convenience to validate the change, etc.
: cvs diff -u -U5 CompletableFuture.java Index: CompletableFuture.java
RCS file: /home/jsr166/jsr166/jsr166/src/main/java/util/concurrent/CompletableFuture.java,v retrieving revision 1.80 diff -u -U 5 -r1.80 CompletableFuture.java --- CompletableFuture.java 1 Apr 2013 20:16:05 -0000 1.80 +++ CompletableFuture.java 4 Apr 2013 13:34:58 -0000 @@ -2812,12 +2812,15 @@ } if (dst == null) dst = new CompletableFuture(); } }
if (e == null && ex != null)
if (ex != null) {
if (dst == null)
dst = new CompletableFuture<U>(); dst.internalComplete(null, ex);
} } helpPostComplete(); dst.helpPostComplete(); return dst; }
Here is a test to reproduce:
:> cat ThenCompose.java
import java.util.concurrent.CompletableFuture;
public class ThenCompose {
public static void main(String[] args) throws Exception {
CompletableFuture<?> cf1 = CompletableFuture.supplyAsync(() ->
{ throw new RuntimeException(); });
CompletableFuture<Void> cf2 = cf1.thenCompose((x) ->
{ return new
CompletableFuture(); }); } }
:>/export/home/chris/repos/jdk8/tl/cf/build/solaris-sparc-normal-server-release/jdk/bin/java ThenCompose Exception in thread "main" java.lang.NullPointerException at java.util.concurrent.CompletableFuture.doCompose(CompletableFuture.java:2847) at java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2756) at ThenCompose.main(ThenCompose.java:8) lection
-Chris.
On 03/27/2013 07:46 PM, Doug Lea wrote:
On 03/23/13 07:08, Doug Lea wrote:
There was a signature mismatch between the public public static CompletableFuture anyOf(CompletableFuture<?>... cfs) and the internal method performing most of the work: private static CompletableFuture<?> anyTree(...) ("" and "<?>" are subtly different.) Thanks to Martin especially for knocking some sense into me about this. The type signature was incompatible, but changing to rather the made this updated version less useful (it could only return indication, not result). So it is now updated with a signature-correct version of anyOf with its original semantics. Additionally, while being slightly disruptive anyway: This class was lacking a little convenience method found in other Future-based frameworks that surely will be requested. So now added: /** * Returns a new CompletableFuture that is already completed with * the given value. * * @param value the value * @return the completed CompletableFuture */ public static CompletableFuture completedFuture(U value)
- Previous message: sun.awt.X11 logs still using String + (waste)
- Next message: hg: jdk8/tl/jdk: 8000406: change files using @GenerateNativeHeader to use @Native
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]