zoukankan      html  css  js  c++  java
  • 四、实现线程的第三种方式

    一、 实现线程前两种方式的缺点

    1) 没有返回值

    2) 不支持泛型

    3) 异常必须处理

    二、实现多线程的第三种方式

    实现 Callable 接口,重写 call 方法 

    Callable 功能更加强大

    1) Future 接口位于 java.util.concurrent 包中,可以对具体 Runnable、 Callable 任务的执行结果进行取消(cancel 方法, 尝试取消执行此任务)、查询是否完成(isDone 方法)、获取 结果(get 方法,等待完成,然后检索其结果)等。

    2) FutrueTask 是 Futrue 接口的唯一的实现类

    3) FutureTask 同时实现了 Runnable,Future 接口。它既可以 作为 Runnable 被线程执行,又可以作为 Future 得到 Callable 的返回值

     1 import java.util.concurrent.Callable;
     2 import java.util.concurrent.ExecutionException;
     3 import java.util.concurrent.FutureTask;
     4 
     5 /**
     6  * ClassName:MyCallable
     7  * date: 2020/4/17 12:16
     8  *
     9  * @author 王鼎禹
    10  */
    11 public class MyCallable implements Callable<String> {
    12     public static void main(String[] args) throws ExecutionException, InterruptedException {
    13         //(1)创建任务
    14         MyCallable call = new MyCallable();
    15         //(2)交能任务管理
    16         /**任务管理器是一个实现类,实现了RunnableFutrue接口,
    17          * RunnableFutrue是Futrue与Runnable接口的子接口*/
    18         FutureTask<String> task = new FutureTask<>(call);
    19         //创建代理类并启动线程
    20         new Thread(task).start();
    21         System.out.println("获取结果:"+task.get());
    22         //判断任务是否执行完成
    23         System.out.println("任务是否执行完成:"+task.isDone());
    24     }
    25     @Override
    26     public String call() throws Exception {
    27         String[] str = {"王一一","乔二二","张三三","刘六六","马五五"};
    28         int index = (int)(Math.random()*5);
    29         return str[index];
    30     }
    31 }

  • 相关阅读:
    Python3-2020-测试开发-7- 元组tuple
    Python3-2020-测试开发-6- 列表list
    面向对象三大特性之多态、封装代码注释部分
    抽象类和接口类代码注释部分
    面向对象三大特性:继承,多态,封装之继承代码注释部分
    面向对象之类的组合代码注释部分
    面对想三大特性之多态,封装
    面向对象三大特性:继承,多态,封装之继承
    类与对象的命名空间
    面向对象和类
  • 原文地址:https://www.cnblogs.com/qiaoxin11/p/12719108.html
Copyright © 2011-2022 走看看