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();
    
  • 相关阅读:
    vue-cli3和element做一个简单的登陆页面
    用vue和layui简单写一个响应式数据展示表
    js中的AJAX
    js个人笔记简记
    解决sublime快捷键回车换行问题
    Sublime设置格式化代码快捷键ctrl+shift+r
    2020前端最新面试知识点汇总
    cookie,sessionstorage,localstorage区别
    linux/centos7安装mysql
    linux基本命令的操作
  • 原文地址:https://www.cnblogs.com/loveer/p/11409202.html
Copyright © 2011-2022 走看看