Java并发多线程编程,Java面试手册pdf

  • public FutureTask(Runnable runnable,V result) 创建一个 FutureTask ,将在运行时执行给定的 Runnable ,并安排 get将在成功完成后返回给定的结果。 参数:runnable 表示可运行的任务 ;result 表示成功完成后返回的结果。

2、常用的方法

  • public boolean isCancelled() 如果此任务在正常完成之前取消,则返回 true 。

  • public boolean isDone() 返回true如果任务已完成。

  • public V get() 等待计算完成,然后检索其结果。

  • public V get(long timeout, TimeUnit unit)如果需要等待最多在给定的时间计算完成,然后检索其结果(如果可用)。

  • public boolean cancel(boolean mayInterruptIfRunning)尝试取消执行此任务。

  • protected void set(V v)将此未来的结果设置为给定值,除非此未来已被设置或已被取消。

四、FutureTask类的使用示例


示例参考此博文:https://blog.csdn.net/bazhuayu_1203/article/details/78824847

案例场景

通过示例进行多任务计算,通过get()方法可以异步获取执行结果。

1、创建一个计算任务类,实现Callable接口,重写call方法


package com.xz.thread.FutureTask;



import java.util.concurrent.Callable;



/**

 * @description: 创建一个计算任务类,实现Callable接口,重写call方法

 * @author: xz

 * @create: 2021-06-02 22:06

 */

public class ComputeTask implements Callable<Integer> {



    private String taskName;//任务名称



    //任务构造器

    public ComputeTask(String taskName) {

        this.taskName = taskName;

        System.out.println("创建【计算任务】开始,计算任务名称:" + taskName);

    }



    //计算任务的方法

    @Override

    public Integer call() throws Exception {

        Integer result = 0;

        for (int i = 1; i <=50; i++) {

            result = +i;

        }

        System.out.println("【计算任务】"+taskName +"执行完成。");

        return result;

    }

} 

2、创建一个测试类


package com.xz.thread.FutureTask;



import java.util.ArrayList;

import java.util.List;

import java.util.concurrent.ExecutionException;

import java.util.concurrent.ExecutorService;

import java.util.concurrent.Executors;

import java.util.concurrent.FutureTask;



/**

 * @description:

 * @author: xz

 * @create: 2021-06-01 22:44

 */

public class Demo {

    public static void main(String[] args) {

        //任务集合

        List<FutureTask<Integer>> futureTasks  = new ArrayList<>();

        //创建固定长度的线程池

        ExecutorService pool = Executors.newFixedThreadPool(5);

        for (int i = 1; i <= 10; i++) {

            //实例化FutureTask,传入计算任务类

            FutureTask<Integer> futureTask = new FutureTask<>(new ComputeTask(i + ""));

            //添加到任务集合中

            futureTasks.add(futureTask);

            //提交任务到线程池

            pool.submit(futureTask);

        }

        System.out.println("所有【计算任务】提交完毕,主线程开始执行");



        System.out.println("【主线程任务】开始============");

        //主线程睡眠5秒,模拟主线程做某些任务

        try {

            Thread.sleep(5000);

            System.out.println("【主线程任务】开始执行某些任务============");

        } catch (InterruptedException e) {

            e.printStackTrace();

        }

        System.out.println("【主线程任务】结束============");



        //用于打印任务执行结果

        Integer result = 0;

        for (FutureTask<Integer> task : futureTasks) {

            try {

                //FutureTask的get()方法会自动阻塞,知道得到任务执行结果为止

                result += task.get();

            } catch (InterruptedException e) {

                e.printStackTrace();

            } catch (ExecutionException e) {

                e.printStackTrace();

            }

        }

        //关闭线程池

        pool.shutdown();

        System.out.println("多线程多任务执行结果:" + result);



    }





## 总结

互联网大厂比较喜欢的人才特点:对技术有热情,强硬的技术基础实力;主动,善于团队协作,善于总结思考。无论是哪家公司,都很重视高并发高可用技术,重视基础,所以千万别小看任何知识。面试是一个双向选择的过程,不要抱着畏惧的心态去面试,不利于自己的发挥。同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,是不是能真的得到锻炼。其实我写了这么多,只是我自己的总结,并不一定适用于所有人,相信经过一些面试,大家都会有这些感触。

**另外想要面试题及答案的小伙伴请[点击这里自行领取](https://gitee.com/vip204888/java-p7),本人还整理收藏了2021年多家公司面试知识点以及各种技术点整理 **

**下面有部分截图希望能对大家有所帮助。**

过程,不要抱着畏惧的心态去面试,不利于自己的发挥。同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,是不是能真的得到锻炼。其实我写了这么多,只是我自己的总结,并不一定适用于所有人,相信经过一些面试,大家都会有这些感触。

**另外想要面试题及答案的小伙伴请[点击这里自行领取](https://gitee.com/vip204888/java-p7),本人还整理收藏了2021年多家公司面试知识点以及各种技术点整理 **

**下面有部分截图希望能对大家有所帮助。**

![在这里插入图片描述](https://img-blog.csdnimg.cn/img_convert/451fd1ea535f1b398a7576c1fe63a6be.png)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值