CompletableFuture.runAsync未完成执行

时间:2018-04-08 04:49:08

标签: java multithreading asynchronous javafx completable-future

我尝试使用CompletableFuture在JavaFX画布上编写大量像素,并且我的方法似乎没有完成其任务,尽管没有抛出异常。

我是异步编程的新手,不知道我应该从哪里开始,但我认为这可能与我收集的信息有关。

我试图使用:

CompletableFuture.runAsync(() -> {
                mandelbrot.increaseScale();
                drawMandelbrot();
            });

致电:

private void drawMandelbrot() {
    //RENDER

    gc.clearRect(0,0,UISpecs.CANVAS_SIZE.getValue(),UISpecs.CANVAS_SIZE.getValue()); // clears canvas of any previously set pixels
    gc.setFill(Color.BLACK); // set canvas background to be black
    gc.fillRect(0,0,UISpecs.CANVAS_SIZE.getValue(),UISpecs.CANVAS_SIZE.getValue()); // set canvas background

    for(double a = -2; a <= 2; a+=.001) {
        for(double b = -2; b <= 2; b+=.001) {
            c = new Complex(a,b);
            col = pickColor(doIterations(c));
            p.setColor(mandelbrot.getX(a), mandelbrot.getY(b), col);
        }
    }
} // drawMandelbrot()

我的复杂(a,b)和pickColor(i)方法非常简单,都可以进行非常小而简单的操作。所以我相信我的嵌套循环是导致我麻烦的原因。

非常感谢任何指导或意见。

1 个答案:

答案 0 :(得分:0)

CompletableFutureFuture接口的实现 并且您希望像素以异步方式呈现在画布上 但你不是在等待未来完成计算,

CompletableFuture<Void> completableFuture =CompletableFuture.runAsync(() -> {
                mandelbrot.increaseScale();
                drawMandelbrot();
            });
completableFuture.get();

CompletableFuture.get()的文档清楚地说明了这一点: 等待异步计算完成然后返回