zoukankan      html  css  js  c++  java
  • Callable带返回值接口使用

    获取多线程的方式 
    1. 继承Thread 
    2. 实现Runnable接口 
    3. 实现Callable接口 带范型有返回值 FutureTask(Callable<V>) 
    4. 线程池

    Callable返回值获取放在最后(futureTask.get()) 
    调用多次FutureTask仍然只执行一次,执行多次则需要创建多个FutureTask

    /**
     * Callable创建线程的方式(Callable带返回值)
     */
    class MyThreadByCallable implements Callable<Integer>{
    
        @Override
        public Integer call() throws Exception {
            System.out.println(Thread.currentThread().getName() + "	 来模拟计算");
    
            // 模拟计算业务
            TimeUnit.SECONDS.sleep(3);
    
            return 1024;
        }
    }
    /***
     * 三种创建线程方式
     * 1、继承Thread类
     * 2、实现Runnable接口
     * 3、使用Callable<String>接口,结合FutureTask
     * 今天就来演示Callable创建线程的方式(Callable带返回值)
     */
    public class CallableDemo {
        public static void main(String[] args) throws ExecutionException, InterruptedException {
            FutureTask<Integer> futureTask = new FutureTask<>(new MyThreadByCallable());
            // FutureTask<Integer> futureTask2 = new FutureTask<>(new MyThreadByCallable());
    
            Thread thread = new Thread(futureTask, "t1");
            thread.start();
            // 调用多次FutureTask仍然只执行一次,执行多次则需要创建多个FutureTask
            // Thread thread2 = new Thread(futureTask2, "t2");
            // thread2.start();
    
            // Callable返回值获取如果放在这里,它会阻塞main线程计算,会影响并发效率
            // Integer t1Result = futureTask.get();
    
            // main线程模拟计算
            Integer mainResult = 1000;
            System.out.println("main线程计算完毕,mainResult=" + mainResult);
    
            /*while(!futureTask.isDone()){
    
            }*/
    
            // Callable返回值获取最好放在最后,否则如果t1计算时间过长,它会阻塞main线程计算
            Integer t1Result = futureTask.get();
    
            System.out.println("t1线程计算完毕,t1Result=" + t1Result);
            System.out.println("两个线程计算总和为:" + (mainResult + t1Result));
    
    
            System.out.println(Runtime.getRuntime().availableProcessors());
    
        }
    }
    

     

  • 相关阅读:
    红外图像非均匀性校正相关汇总
    【matlab】图像去噪的代码测试
    基于字典学习的图像超分辨率相关
    基于FP-Growth算法的关联性分析——学习笔记
    Hadoop:相关概念
    Sybase:删除表中的某列
    Sybase:循环调用存储过程
    Python3.x:定时自动发送邮件
    问题:如何对两个文件夹中的文件进行对比
    Sybase数据库:两个特别注意的地方
  • 原文地址:https://www.cnblogs.com/xhyouyou/p/12465330.html
Copyright © 2011-2022 走看看