* @throws CancellationException {@inheritDoc}
public V get() throws InterruptedException, ExecutionException {
int s = state;
Completable
Future
优化接口性能案例需求背景解决方案
在教育中心所有课程详情页都大致包含下面这么些,每种卡片的数据可能来自不同的数据源。数据源可能就是缓存数据,也可能是第三方的接口返回数据。因此对于这个接口一次性返回这么多卡片信息还是有点重的,我们尽量要使得每个卡片请求的数据要够快。对于头部影藏卡片而言,在数据适配阶段串行调用了三个第三方接口,而且每个接口最大超时时间outTime=200~300ms,对整个接口的性能还是有很大影响。
课程详情头部隐藏卡片,课程详情头部促销卡片,
什么是
Future
Task
Future
Task
类实现了Runnable
Future
接口,Runnable
Future
继承了Runnable接口和
Future
接口,而
Future
Task
实现了Runnable
Future
接口。所以
Future
Task
既可以作为Runnable被线程执行,又可以作为
Future
得到Callable的返回值。
怎么用
Future
Task
由介绍可知,
Future
Ta...
1、空指针问题NullPointerException 是
Java
代码中最常见的异常,将其最可能出现的场景归为以下 5 种:参数值是 Integer 等包装类型,使用时因为自动拆箱出现了
空指针异常
;
字符串比较出现
空指针异常
;诸如 ConcurrentHashMap 这样的容器不支持 Key 和 Value 为 null,强行 put null 的 Key 或 Value 会出现
空指针异常
;A 对象包含了 B,在通过 A 对象的字段获得 B 之后,没有对字段判空就级联调用 B 的
方法
出现空指针
Future
Task
继承关系如下
public
Future
Task
<V> implements Runnable
Future
<V> {
public
Future
Task
(Callable<V> callable) {
if (calla
import
java
.util.concurrent.Callable;
import
java
.util.concurrent.ExecutionException;
import
java
.util.concurrent.
Future
Task
;
public class
Future
Task
Example {
public static void main(String[] args) throws InterruptedException, ExecutionException {
Callable<Integer> callable = new Callable<Integer>() {
@Override
public Integer call() throws Exception {
int sum = ;
for (int i = 1; i <= 100; i++) {
sum += i;
return sum;
Future
Task
<Integer>
future
Task
= new
Future
Task
<>(callable);
Thread thread = new Thread(
future
Task
);
thread.start();
int result =
future
Task
.get();
System.out.println("1到100的和为:" + result);
这个例子中,我们使用了
Future
Task
来异步执行一个 Callable 对象,然后通过 get()
方法
获取 Callable 的返回值。在这个例子中,Callable 计算了 1 到 100 的和,最后返回这个和,然后我们在主线程中获取这个和并输出。