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的返回值 
  • 相关阅读:
    斐波那契比率(2016-9-13)
    MQL5备忘(2016-8-28)
    [转载]联邦基金利率期货
    二十四节气对照表
    [Android] 为Android安装BusyBox —— 完整的bash shell(收藏用)
    如何调试分析Android中发生的tombstone
    Android log系统 转
    android 系统log文件路径
    GCM Architectural Overview
    google cloud message 运行成功0621
  • 原文地址:https://www.cnblogs.com/vincentmax/p/14246022.html
Copyright © 2011-2022 走看看