zoukankan      html  css  js  c++  java
  • JUC 一 Callable

    java.util.concurrent.Callable是一个泛型接口,只有一个call()方法

    Callable和Runnable的区别

    1. Callable使用call()方法,Runnable使用run()方法
    2. call()可以返回值,而run()方法没有返回值
    3. call()可以抛出受检查的异常,比如ClassNotFoundException,而run()不能抛出受检查的异常

    继承关系

    程序运行时,Runnable的实例或Callable的实例转化为RunnableFuture的实例FutureTask:
        RunnableFuture继承了Runnable和Future接口
    
    FutureTask是Future的实现类,而且不仅是Future又是Runnable,还包装了Callable,它是这两者的合体。
    
        //FutureTask的基本操作都是通过自己的内部类Sync来实现的
        public class FutureTask<V> implements RunnableFuture<V>
    
        public interface RunnableFuture<V> extends Runnable, Future<V>
    
    
    public interface Future<V> {
    
        boolean cancel(boolean mayInterruptIfRunning);    //还没计算完,可以取消计算过程
    
        boolean isCancelled();    //判断计算是否被取消
    
        boolean isDone();    //判断是否计算完
    
        V get() throws InterruptedException, ExecutionException;    //获取计算结果(如果还没计算完,也是必须等待的)
    
        V get(long timeout, TimeUnit unit)
            throws InterruptedException, ExecutionException, TimeoutException;
    }
    

    示例

            Callable<User> callable= new Callable<>() {
    
                @Override
                public User call() throws Exception {
                    ...
                    return new User();
                }
                
            };
    
            FutureTask<User> task = new FutureTask<>(callable);
            new Thread(task).start();
            
            if (!task.isDone()) {
                ```
            }
            User user = task.get();
    
  • 相关阅读:
    循环队列和链队列的实现
    【lightoj-1026】Critical Links(桥)
    顺序栈和链栈的实现
    【51nod-1605】棋盘问题
    【51nod-1596】搬货物
    【海明码】(容易看懂)
    【lightoj-1094】树的直径(DFS)
    【lightoj-1046】Rider(BFS)
    【第13届景驰-埃森哲杯广东工业大学ACM程序设计大赛-F】等式(因子个数)
    浅谈Vue个性化dashBoard 布局
  • 原文地址:https://www.cnblogs.com/loveer/p/11409202.html
Copyright © 2011-2022 走看看