renderer.java

来自「java concurrency in practice 源码. JAVA」· Java 代码 · 共 61 行

JAVA
61
字号
package net.jcip.examples;import java.util.*;import java.util.concurrent.*;import static net.jcip.examples.LaunderThrowable.launderThrowable;/** * Renderer * <p/> * Using CompletionService to render page elements as they become available * * @author Brian Goetz and Tim Peierls */public abstract class Renderer {    private final ExecutorService executor;    Renderer(ExecutorService executor) {        this.executor = executor;    }    void renderPage(CharSequence source) {        final List<ImageInfo> info = scanForImageInfo(source);        CompletionService<ImageData> completionService =                new ExecutorCompletionService<ImageData>(executor);        for (final ImageInfo imageInfo : info)            completionService.submit(new Callable<ImageData>() {                public ImageData call() {                    return imageInfo.downloadImage();                }            });        renderText(source);        try {            for (int t = 0, n = info.size(); t < n; t++) {                Future<ImageData> f = completionService.take();                ImageData imageData = f.get();                renderImage(imageData);            }        } catch (InterruptedException e) {            Thread.currentThread().interrupt();        } catch (ExecutionException e) {            throw launderThrowable(e.getCause());        }    }    interface ImageData {    }    interface ImageInfo {        ImageData downloadImage();    }    abstract void renderText(CharSequence s);    abstract List<ImageInfo> scanForImageInfo(CharSequence s);    abstract void renderImage(ImageData i);}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?