zoukankan      html  css  js  c++  java
  • 关于线程3

    线程定义和创建3:实现Callable接口

    JDK1.5后推出了第三种定义线程的方式,实现Callable接口

    public class RandomCallable implements Callable<Integer> {
        @Override
        public Integer call() throws Exception {
            Thread.sleep(5000);
            //throw new IOException();
            return new Random().nextInt(10);
        }
        public static void main(String[] args)
                throws InterruptedException, ExecutionException {
            //创建线程对象
            Callable<Integer> callable = new RandomCallable();
            FutureTask<Integer> task = new FutureTask<Integer>(callable);
            Thread thread = new Thread(task);
            //启动线程
            thread.start();
            //获取返回值
            System.out.println(task.isDone());

    //必须等线程执行完毕后,才能得到返回值,线程在此会阻塞
            Integer num = task.get();
            System.out.println(num);
            System.out.println(task.isDone());//线程是否执行完毕
        }
    }

    第三种方式:实现Callable接口

    与实行Runnable相比, Callable功能更强大些

    • 方法名不同  
    • 可以有返回值,支持泛型的返回值
    • 可以抛出检查异常
    • 需要借助FutureTask,比如获取返回结果 

    Future接口

    • 可以对具体Runnable、Callable任务的执行结果进行取消、查询是否完成、获取结果等。
    • FutrueTask是Futrue接口的唯一的实现类
    • FutureTask 同时实现了Runnable, Future接口。它既可以作为Runnable被线程执行,又可以作为Future得到Callable的返回值 
  • 相关阅读:
    .net下将富文本编辑器文本原样读入word文档
    最大流算法完整代码
    如何用程序删除win 7下SYSTEM权限的目录
    01背包问题的动态规划算法
    使用gem安装jekyll错误记录
    dev机上数据库中批量生成table
    git pull错误记录及解决
    git clone操作到开发机的错误记录
    nginx错误记录
    链表链式结构的写法
  • 原文地址:https://www.cnblogs.com/vincentmax/p/14246022.html
Copyright © 2011-2022 走看看