java future<v>,java Future

Future代表一个异步计算的结果,并且它提供一些方法来让调用者检测异步过程是否完成,或者取得异步计算的结果,或者取消正在执行的异步任务。*

public class Test {

private static ExecutorService executorService = Executors.newSingleThreadExecutor();

public static void main(String[]args){

System.out.println("hello world");

Futurefuture = calcute(9);

while (!future.isDone()){

try {

Thread.sleep(100);

} catch (InterruptedException e) {

e.printStackTrace();

} finally {

System.out.println("正在执行");

}

}

try {

int result = future.get();

System.out.println("result = " + result);

} catch (ExecutionException e) {

e.printStackTrace();

} catch (InterruptedException e) {

e.printStackTrace();

}

}

public static Futurecalcute(Integer i) {

return executorService.submit(() -> {

Thread.sleep(1000);

System.out.println("return future for " + i);

return i *i;

});

}

}

一个简单Future使用用例写完,使用线程池+Callback+Future,完成了一个简单的计算操作。

Future是一个接口,先看一下内部方法:

public interface Future {

boolean cancel(boolean var1);

boolean isCancelled();

boolean isDone();

V get() throws ExecutionException, InterruptedException;

V get(long var1, TimeUnit var3) throws ExecutionException, InterruptedException, TimeoutException;

}

get()函数是返回计算结果,注意get会同步操作,没有返回结果前,会阻塞线程。

get还有一个重载函数get(long var1, TimeUnit var3),第一个参数是时长,第二个是单位。

表示在多少时长内获取结果,如果仍未返回,则抛出异常TimeoutException。

try{

int result2 = future2.get(1000, TimeUnit.MILLISECONDS);

} catch(TimeoutException e) {

e.printStackTrace();

}

cancel(boolean) 表示是否取消该future,

不能在调用cancel(true)/cancel(false)后,调用get()函数,否则会抛出异常CancellationException

isCancelled()函数是判断该future是否已取消

isDone()函数是判断该future是否已完成

isDone()函数是实时状态读取,不会阻塞线程。

Callback

Callback 是一个接口,内部只有一个函数

@FunctionalInterface

public interface Callable {

V call() throws Exception;

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值