futureTask用法

futureTask用法futureTask用法深入学习FutureTask主要讲解了如何去使用futureTask来创建多线程任务,并获取任务的结果。Callable接口:实现这个接口的类,可以在这个类中定义需要执行的方法和返回结果类型。MyTask.java类publicclassMyTaskimplementsCallable<Object>{p…

大家好,又见面了,我是你们的朋友全栈君。

futureTask用法

深入学习FutureTask  主要讲解了如何去使用futureTask来创建多线程任务,并获取任务的结果。

Callable接口:实现这个接口的类,可以在这个类中定义需要执行的方法和返回结果类型。

MyTask.java类

  

public class MyTask  implements Callable<Object>{    
    private String args1;
    private String args2;
    //构造函数,用来向task中传递任务的参数
    public  MyTask(String args1,String args2) {
        this.args1=args1;
        this.args2=args2;
    }
    //任务执行的动作
    @Override
    public Object call() throws Exception {
        
        for(int i=0;i<100;i++){
            System.out.println(args1+args2+i);
        }
        return true;
    }
}

 

 FutureTask使用方法

public static void main(String[] args) {
        MyTask myTask = new MyTask("11", "22");//实例化任务,传递参数
        FutureTask<Object> futureTask = new FutureTask<>(myTask);//将任务放进FutureTask里
        //采用thread来开启多线程,futuretask继承了Runnable,可以放在线程池中来启动执行
        Thread thread = new Thread(futureTask);
        thread.start();
        
        try {
            //get():获取任务执行结果,如果任务还没完成则会阻塞等待直到任务执行完成。如果任务被取消则会抛出CancellationException异常,
            //如果任务执行过程发生异常则会抛出ExecutionException异常,如果阻塞等待过程中被中断则会抛出InterruptedException异常。
            boolean result = (boolean) futureTask.get();
            System.out.println(result);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

另外一种方式来开启线程

ExecutorService executorService=Executors.newCachedThreadPool();
        executorService.submit(futureTask);
        executorService.shutdown();

多个任务,开启多线程去执行,并依次获取返回的执行结果

public static void main(String[] args) {    
        //创建一个FutureTask list来放置所有的任务
        List<FutureTask<Object>> futureTasks=new ArrayList<>();
        for(Integer i=0;i<10;i++){
            MyTask myTask=new MyTask(i.toString(), i.toString());
            futureTasks.add(new FutureTask<>(myTask));
        }
        
        //创建线程池后,依次的提交任务,执行
        ExecutorService executorService=Executors.newCachedThreadPool();
        for(FutureTask<Object> futureTask:futureTasks){
            executorService.submit(futureTask);
        }
        executorService.shutdown();
        
        //根据任务数,依次的去获取任务返回的结果,这里获取结果时会依次返回,若前一个没返回,则会等待,阻塞
        for(Integer i=0;i<10;i++){
            try {
                String flag=(String)futureTasks.get(i).get();
                System.out.println(flag);
            } catch (Exception e) {
                e.printStackTrace();
            }

        }
    }

 

 

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/149416.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • POJ 2478 Farey Sequence

    POJ 2478 Farey Sequence

    2021年11月29日
    45
  • oracle 方法函数,执行oracle函数的四种方法

    oracle 方法函数,执行oracle函数的四种方法最近在对数据库进行从sqlSERVER改造到ORACLE过程中遇到了一个头疼的问题,sqlSERVER可以返回一个结构化的数据集,ORACLE函数不行,要执行函数(含返回值),函数过程中将语句插进事务性临时表里再读取临时表找到如下资料,执行ORACLE函数的方法:1.在定义函数时:如果有参数,则参数可有类型但是不加长度。2.在执行函数:var/variablevar_namevar_type…

    2022年7月17日
    14
  • “光猫”调制解调器 和 路由器的区别 傻傻分不清

    “光猫”调制解调器 和 路由器的区别 傻傻分不清一、“猫”指调制解调器,所谓调制,就是把数字信号转换成电话线上传输的模拟信号;解调,即把模拟信号转换成数字信号。合称调制解调器。调制解调器的英文是“Modem”,读音与“猫”相似,因此被称作“猫”。简单来说,“猫”的主要作用是上连宽带线路,下连电脑,实现电脑与宽带的连接,这样电脑才能够正常上网。路由器,又称网关设备,英文名是“Router”,是连接因特网中各局域网、广域网的设备,它会根据信…

    2025年7月12日
    5
  • LoadRunner教程(7)-LoadRunner 创建测试场景

    LoadRunner教程(7)-LoadRunner 创建测试场景首先打开controller创建一个场景,有手工场景和目标场景设置两个选项,先选择手工场景手工场景设置GlobalSchedule:Scenario初始化:所有用户同时初始化,每隔多少秒初始化多少用户,每个用户运行之前初始化启动用户:多少用户启动,同时启动,每隔多长时间启动多少用户运行时间:持续运行直到结束,持续运行时间用户退出:用户同时退出,每隔多长时间…

    2022年5月10日
    45
  • 开源Fast R-CNN代码实现物体识别[通俗易懂]

    开源Fast R-CNN代码实现物体识别[通俗易懂]参考链接:https://blog.csdn.net/linolzhang/article/details/703060031.资源链接代码下载链接:https://github.com/CharlesShang/TFFRCNN训练好的网络下载链接: 在TFFRCNN-master下新建文件夹model,存放要下载入的net(参考Github下载地址),推荐下载: …

    2022年7月16日
    17
  • Windows 下Maven安装配置(本地仓库配置)[通俗易懂]

    Windows 下Maven安装配置(本地仓库配置)[通俗易懂]一、下载mavenmaven官网:http://maven.apache.org/下载下来也就是一个压缩文件,解压。我下载的是3.5.2版本,解压之后如下:路径为:D:\ProgramFiles\apache-maven-3.5.2二、配置环境变量添加自定义变量:MAVEN_HOME值为刚才的解压路径:D:\ProgramFiles\apache-maven-3.5.2。MAVEN_

    2022年5月8日
    47

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号