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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • SSH整合JPA+Mysql

    SSH整合JPA+Mysql

    2021年9月26日
  • python快速排序法实现

    python快速排序法实现基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。一趟快速排序的算法是:1)设置两个变量i、j,排序开始的时候:i=0,j=N-1;2)以第一个数组元素作为关键数据,赋值给key,即key=A[0];3

    2022年10月31日
  • 梯度下降 随机梯度下降 算法是_神经网络算法

    梯度下降 随机梯度下降 算法是_神经网络算法一、一维梯度下降算法思想:我们要找到一个函数的谷底,可以通过不断求导,不断逼近,找到一个函数求导后为0,我们就引入了一个概念学习率(也可以叫作步长),因为是不断逼近某个x,所以学习率过大会导致超过最优解,而学习率过小,会导致收敛速度过慢。二、多维梯度下降算法思想:和一维梯度下降算法思想类似,只是导数由原来的一维变成现在的多维,算法思想本质没有变化,在计算导数的过程发生了…

    2022年9月3日
  • SQLServer2K远程连接问题解决方案(转载自飞狐小屋)

    SQLServer2K远程连接问题解决方案(转载自飞狐小屋)由于特定需求,最近实验室需要远程连接外地的sqlserver2000服务器,最开始怎么连也连不上,出现了很多问题,但是在今天上午,借用实验室的测试条件(一个公网IP,两个教育网静态IP),终于调试通过,也算是完成了老师的任务,在这里写下自己的心得,参考了很多网上的文章和论坛里的问题,希望对有此需要的有帮助。不完善之处,也请留言。废话少说,进入主题。步骤:一看ping服务…

    2022年9月1日
  • pycharm怎么关闭提示_嵌入自动补全

    pycharm怎么关闭提示_嵌入自动补全Pycharm是一款非常好用的Python的IDE。但就是因为它太好用了,所以对于Python新手来说,反而会导致脱离了代码提示功能,就完全不记得了函数名,大小写等,这对于新手来说是不太利于成长的。但是有一说一,Pycharm本身还是非常好用的,而且用习惯了,因此我一直想能够在学习的时候把Pycharm的代码提示功能关闭,工作的时候再打开,找了很久终于找到了T_T。当没有关闭代码提示的时候,…

    2022年8月29日
  • generic host process for win32_hostunreachable怎么解决

    generic host process for win32_hostunreachable怎么解决本人使用的windows2003sp1英文版。昨天开始总是莫明其妙出现GenericHostProcess进程出错提示框,紧跟着svchost内存出错提示框, 之后一些service就停止工作,比如WindowsAudio,必须手动重启才能听音乐;网络连接假死,tcp连接需要重连,不胜其扰。上网搜了些文章,基本上分为三个原因:1,木马病毒。2,系统漏洞。3,硬件驱动问题

    2022年10月10日

发表回复

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

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