多线程高并发开发安卓开发博客java多线程

Java 多线程(三):Callable、Future、Futu

2018-03-11  本文已影响54人  聪明的奇瑞

无论是 Thread 或是 Runnable,在任务执行完成后无法获取返回结果

Callable、Future、FutureTask

Callable

public interface Callable<V> {   
      V   call()   throws Exception;   
}   

Future

FutureTask

public FutureTask(Callable<V> callable) {  
}  
public FutureTask(Runnable runnable, V result) {  
}  

代码例子

public class Main {
    public static void main(String[] args) {
        Callable<String> callable = new MyCallable();
        FutureTask<String> futureTask = new FutureTask<String>(callable);
        new Thread(futureTask).start();
        try {
            System.out.println(futureTask.get());
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
    }

    public static class MyCallable implements Callable<String> {
        public String call() throws Exception {
            Thread.sleep(1000);
            return "linyuan";
        }
    }
}

public class Main {
    public static void main(String[] args) {
        ExecutorService executorService = Executors.newSingleThreadExecutor();
        Callable<String> callable = new MyCallable();
        Future future = executorService.submit(callable);
        try {
            System.out.println(future.get());
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
        executorService.shutdown();
    }

    public static class MyCallable implements Callable<String> {
        public String call() throws Exception {
            Thread.sleep(1000);
            return "linyuan";
        }
    }
}

上一篇 下一篇

猜你喜欢

热点阅读