java多线程之Future模式使用

Future模式简述

  • 传统单线程环境下,调用函数是同步的,必须等待程序返回结果后,才可进行其他处理。
    Futrue模式下,调用方式改为异步。
  • Futrue模式的核心在于:充分利用主函数中的等待时间,利用等待时间处理其他任务,充分利用计算机资源。

主要角色

  1. Main:系统启动,调用Client发出请求
  2. Client:返回Data对象,立即返回FutureData,并开启ClientThread线程装配RealData
  3. Data:返回数据的接口
  4. FutureData:Futrue数据,是一个虚拟的数据,需要装配RealData
  5. RealData:真实数据,构造比较慢。

JDK内置实现
——-jdk中已经内置future模式的实现。其中最重要的事模块是FutrueTask类,它实现了Runnable接口,作为单独的线程运行,在其run() 方法中,通过Sync内部类,调用Callable接口,并维护Callable接口的返回对象。使用FutureTask.get()方法,返回Callable接口的返回对象。
具体使用如下:

RealData.java

package com.y.www;

import java.util.concurrent.Callable;

/**
 * @description:
 * @author: lbYue
 * @date: Created in 14:11 2018/1/9
 */
public class RealData implements Callable<String> {

    private String para;

    public RealData(String para){
        this.para = para;
    }

    @Override
    public String call() throws Exception {
        //真实的业务逻辑
        StringBuffer sb = new StringBuffer();
        for (int i= 0 ;i < 10 ; i++){
            sb.append(para);
            try {
                Thread.sleep(100);
            }catch (InterruptedException e){

            }
        }

        return sb.toString();
    }
}

MainTest.java

package com.y.www;

import java.util.concurrent.*;

/**
 * @description:
 * @author: lbYue
 * @date: Created in 14:15 2018/1/9
 */
public class MainTest {

    public static void main(String[] args) throws InterruptedException,ExecutionException{

        FutureTask<String> future = new FutureTask<String>(new RealData("a"));
        ExecutorService executor = Executors.newFixedThreadPool(1);

        executor.submit(future);
        System.out.println("请求完毕!");
        try {
            System.out.println("我在睡觉别打扰我!2秒后回应");
            Thread.sleep(2000);
        }catch (InterruptedException e){

        }
        System.out.println("数据处理完成:"+future.get());

    }
}

控制台输出结果
这里写图片描述

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值