• 多线程2


    Future 接口对于具体的Runnable 或者 Callable 任务的执行结果进行取消、查询是否完成、获取结果。 get() 方法获取结果会产生阻塞,会一直等到任务执行完毕才返回。  V get(long timeout, TimeUnit unit) 获取执行结果,如果在指定的时间内,没有获取到结果,则返回null。

    Future 提供三种功能: 判断任务是否完成、能够中断任务、能够获取任务执行结果。

    FutureTask 类 继承 Runnable和 Future 接口。所以它既可以作为Runnable 被线程执行,又可以作为Future 得到Callable 的返回值。

    package fork.task;
    
    import java.util.concurrent.Callable;
    import java.util.concurrent.ExecutionException;
    import java.util.concurrent.FutureTask;
    
    /**  
    * <p>Description:TODO </p>  
    * @author zhoudingzhao  
    * @date 2019年4月8日  下午2:01:16
    * @version 1.0  
    */
    public class FutureTaskDemo {
    	public static void main(String[] args) throws InterruptedException, ExecutionException {
    		SonTask task1 = new SonTask("Thread son1");
    		FutureTask<String> f1 = new FutureTask<String>(task1);               //传入 Callable 参数,FutureTask 实例的 get() 结果是 Callable 的返回结果。
    new Thread(f1).start(); FutureTask<Integer> f2 = new FutureTask<Integer>(new MyRun(),22); // 传入 Runnable 参数,则 第二个参数就是 FutureTask 实例的 get() 结果。 new Thread(f2).start(); System.out.println(f1.get()); System.out.println("result_" + f2.get()); } } class SonTask implements Callable<String> { private String name = ""; SonTask(String name) { this.name = name; } public String call() throws Exception { Thread.sleep(1000L); System.out.println(name + "任务计算完成"); return "result_11"; } } class MyRun implements Runnable { public void run() { try { Thread.sleep(10L); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("特定线程2完成"); } }

      输出:

    特定线程2完成  
    Thread son1任务计算完成
    result_11
    result_22

    在 f1 和 f2 先后start 执行的情况下, f2 只 sleep 了 10毫秒, 所以先打印 特定线程2完成   ,但是 由于在  f2.get() 之前 先执行 了  f1.get() , 因此需要等待  f1 执行完成。 再输出  f2.get() .

  • 相关阅读:
    信息安全基本概念
    GmSSL开发环境搭建及双证书生成
    Git使用教程
    linux软件管理
    在Windows中查看文件的MD5值
    odoo显示页面格式化日期的一个方法
    Ubuntu 查看文件夹大小
    docker容器中启动postgresql 9.5失败:could not locate a valid checkpoint record
    如何让postgresql日志记录所有的执行语句
    vim快捷键
  • 原文地址:https://www.cnblogs.com/z360519549/p/10670352.html
Copyright © 2020-2023  润新知