java的FutureTask代码例子讲解

FutureTask:

FutureTask其实相当于是对Callable和Runnable的整合
在实际开发过程中,将那些耗时较长,且可以并行的操作都封装成一个FutureTask。

package com.zr.concurrency.test.others;

import lombok.extern.slf4j.Slf4j;

import java.util.concurrent.*;

/**
 * @description: JUC中FutureTask的使用
 * FutureTask:
 *      FutureTask其实相当于是对Callable和Runnable的整合
 *      在实际开发过程中,将那些耗时较长,且可以并行的操作都封装成一个FutureTask。
 * @author: liangrui
 * @create: 2020-01-03 16:18
 **/
@Slf4j
public class FutureTaskExample {

    public static void main(String[] args) throws InterruptedException, ExecutionException {
        //创建FutureTask类
        //使用Callable,既可以抛异常,又有返回值
        FutureTask<String> futureTask1=new FutureTask<>(new Callable<String>() {
            @Override
            public String call() throws Exception {
                //callable执行任务
                log.info("do something in callable");
                Thread.sleep(5000);
                //执行成功返回"Done"
                return "Done";
            }
        });

        //创建FutureTask类
        //使用Runnable,返回值需要写为第二个参数result,不能抛异常
        FutureTask<String> futureTask2=new FutureTask<>(new Runnable(){
            @Override
            public void run() {
                //runnable执行任务
                log.info("do something in runnable");
                try {
                    Thread.sleep(5000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        },"Done");//执行成功返回result:"Done"

        //创建线程池
        ExecutorService executorService=Executors.newCachedThreadPool();
        executorService.submit(futureTask1);
        executorService.submit(futureTask2);
        //关闭线程池,释放资源
        executorService.shutdown();
        
        //main线程执行任务时间
        Thread.sleep(1000);
        log.info("main finished,waiting...............");
        //获取各线程执行成功的返回值
        String result1=futureTask1.get();
        String result2=futureTask2.get();
        //输出
        log.info("result1:{}",result1);
        log.info("result2:{}",result2);
    }
}

运行结果:

16:41:29.778 [Thread-0] INFO com.zr.concurrency.test.others.FutureTaskExample - do something in callable
16:41:29.778 [Thread-1] INFO com.zr.concurrency.test.others.FutureTaskExample - do something in runnable
16:41:30.775 [main] INFO com.zr.concurrency.test.others.FutureTaskExample - main finished,waiting...............
16:41:34.784 [main] INFO com.zr.concurrency.test.others.FutureTaskExample - result1:Done
16:41:34.788 [main] INFO com.zr.concurrency.test.others.FutureTaskExample - result2:Done
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值