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());
    
        }
    }
    

     

  • 相关阅读:
    深入学习高级非线性回归算法 --- 树回归系列算法
    监督学习中关于线性回归问题的系统讨论
    非均衡分类问题的思考与问题与解决思路
    使用 AdaBoost 元算法提高分类器性能
    支持向量机 (SVM)分类器原理分析与基本应用
    Logistic回归分类算法原理分析与代码实现
    mysql 数据库安装步骤个人总结
    mysql可重复读现象及原理分析
    ssm所需的jar详解
    获取客户端ip地址--getRemoteAddr()和getRemoteHost() 区别
  • 原文地址:https://www.cnblogs.com/xhyouyou/p/12465330.html
Copyright © 2011-2022 走看看