Java 非阻塞式通信中需要了解的概念:Future

Java 非阻塞式通信中需要了解的概念:Future

Netty 中 ChannelFuture 和 Promise 都是继承 java.util.concurrent.Future,所以有必要好好总结一下。

 

1.Future 的介绍、用途

简而言之,Future表示异步计算的将来结果–在处理完成后最终会出现在Future中。

耗时间运行的方法非常适合异步处理和Future接口。这使我们能够在等待Future中封装的任务完成之前执行其他一些操作。

可以利用Future的异步特性的一些操作: 

密集型计算过程(数学和科学计算) 

处理大数据结构(或大数据) 

远程方法调用(下载文件,HTML抓取,Web服务)

 

2.FutureTask

下面的示例,我们将创建一个非常简单的类来计算Integer的平方。这绝对不适合“耗时操作”的方法类别,但是我们将对其进行Thread.sleep()调用,使其持续1秒才能完成:

public class SquareCalculator {    
     
    private ExecutorService executor 
      = Executors.newSingleThreadExecutor();
     
    public Future<Integer> calculate(Integer input) {        
        return executor.submit(() -> {
            Thread.sleep(1000);
            return input * input;
        });
    }
}

 

实际执行计算的部分代码包含在call()方法中,以lambda表达式形式提供。代码很简单,除了前面提到的sleep()调用外,没有什么特别的。

Callable是表示任务的接口,该接口返回结果并具有单一call()方法。在这里,我们使用lambda表达式创建了它的实例。

创建Callable实例后,我们必须将此实例传递给执行者,该执行者将负责在新线程中启动该任务并把宝贵的Future对象返回给我们。那就是ExecutorService的任务。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值