zoukankan      html  css  js  c++  java
  • Java 基础(使用Callable接口新增线程)

    与使用Runnable相比,Callable功能更强大些

    1. 相比run()方法,可以有返回值
    2. 方法可以抛出异常
    3. 支持泛型的返回值
    4. 需要借助 FutureTask 类,比如获取返回结果

    Future接口

    1. 可以对具体 Runnable、Callable 任务的执行结果进行取消、查询是否完成、获取结果等。
    2. FutrueTask 是 Futrue 接口的唯一的实现类
    3. FutureTask 同时实现了 Runnable,Future接口。它既可以作为 Runnable 被线程执行,又可以作为 Future得到 Callable 的返回值
    package com.klvchen.java2;
    
    import java.util.concurrent.Callable;
    import java.util.concurrent.ExecutionException;
    import java.util.concurrent.FutureTask;
    
    //1.创建一个实现 Callable 的实现类
    class NumThread implements Callable{
        //2.实现call方法,将此线程需要执行的操作声明在call()中
        @Override
        public Object call() throws Exception {
            int sum = 0;
            for (int i = 1; i <= 100; i++){
                if (i % 2 == 0){
                    System.out.println(i);
                    sum += i;
                }
            }
            return sum;
        }
    }
    
    public class ThreadNew {
        public static void main(String[] args) {
            //3.创建Callable接口实现类的对象
            NumThread numThread = new NumThread();
            //4.将此Callable接口实现类的对象作为传递到FutureTask构造器中,创建FutureTask的对象
            FutureTask futureTask = new FutureTask(numThread);
            //5.将FutureTask的对象作为参数传递到Thread类的构造器中,创建Thread对象,并调用start()
            new Thread(futureTask).start();
    
            try {
                //6.获取Callable 中call方法的返回值
                //get()返回值即为 FutureTask 构造器参数Callable实现类重写的call()的返回值。
                Object sum = futureTask.get();
                System.out.println("总和为:" + sum);
            } catch (InterruptedException e) {
                e.printStackTrace();
            } catch (ExecutionException e) {
                e.printStackTrace();
            }
        }
    }
    
  • 相关阅读:
    python PIL实现图片合成
    pycharm在windows中如何安装dlib?
    Git将文件上传至Github过程
    安装skimage和cv2
    ubuntu下pip的安装,更新及卸载
    pycharm专业版激活破解(亲测有效)
    docker部署tensorflow serving以及模型替换
    Keras在MNIST实现LeNet-5模型训练时的错误?
    Ubuntu中VMware tools的安装步骤
    win10执行Tensorflow,总是会报错“DLL load failed: 找不到指定的模块”的解决方式----终极版方式
  • 原文地址:https://www.cnblogs.com/klvchen/p/14657516.html
Copyright © 2011-2022 走看看