FutureTask

FutureTask : 仅在计算完成时才能获取结果;如果计算尚未完成,则阻塞 get 方法.一旦计算完成,就不能再重新开始或取消计算.

import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

/**
 * User: caiyuan
 * Date: 13-1-31
 */
public class Preloader {

    private final FutureTask<Boolean> future = new FutureTask<Boolean>(new Runnable() {
        @Override
        public void run() {
            System.out.println("process");
            try {
                Thread.sleep(3000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("done");
        }
    }, true);

    public void start() {
        new Thread(future).start();
    }

    public boolean isDone() {
        try {
            return future.get();
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
        return false;
    }

    public static void main(String[] args) {
        final Preloader preloader = new Preloader();

        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("start");
                preloader.start();
            }
        }).start();

        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println(preloader.isDone());
            }
        }).start();

        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println(preloader.isDone());
            }
        }).start();
    }

}
结果:
start
process
done
true
true

你可能感兴趣的:(FutureTask)