概述
future 的主要作用就是异步调用,让一些耗时的任务在后台慢慢处理,于此同时先去执行其他的任务。countdownlatch 其实也可以实现,只不过future更为强大,countdownlatch 只能获知任务的完成情况,不能得到任务的执行结果,future 则可以在任务执行完毕之后得到任务执行结果。
一般我们使用futuretask和callable的组合。futuretask 常用方法:
- public boolean isCancelled() ; //判断任务是否被取消成功,成功返回true
- public boolean isDone() ; //判断任务是否完成,完成返回true
- public boolean cancel(boolean mayInterruptIfRunning); //取消任务,参数为是否取消正在执行过程中的任务
- public V get(); //获取执行结果,阻塞线程
- public V get(long timeout, TimeUnit unit); //用来获取执行结果,如果在指定时间内,还没获取到结果,就直接返回null。
public static void main(String[] args) throws Exception {
long a =System.currentTimeMillis();
putong(); //普通创建user线程
sent();
long b =System.currentTimeMillis();
System.out.println(b-a);
}
public static void putong() throws InterruptedException {
Thread thread =new Thread(()->{
try {
Thread.sleep(5000); //模拟耗时
User u = new User();
} catch (InterruptedException e) {
e.printStackTrace();
}});
thread.start();
thread.join(); //必须创建完user,才能走下面的发送
}
public static void sent() throws Exception {
Thread.sleep(2000); //模拟耗时
}
输出结果为:7054
public static void main(String[] args) throws Exception {
long a =System.currentTimeMillis();
FutureTask<User> task = future(); //future 创建user线程
sent();
User u = task.get(); // 任务未完成会阻塞线程
long b =System.currentTimeMillis();
System.out.println(b-a);
}
public static FutureTask<User> future() {
Callable<User> cb = new Callable<User>() {
@Override
public User call() throws Exception {
Thread.sleep(5000);
return new User();
}
};
FutureTask<User> task = new FutureTask<>(cb);
new Thread(task).start();
return task;
}
public static void sent() throws Exception {
Thread.sleep(2000);
}
运行结果:5011
最后
以上就是大胆钥匙为你收集整理的Future 模式的全部内容,希望文章能够帮你解决Future 模式所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复