博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用Callable、Future以及FutureTask进行线程操作
阅读量:4509 次
发布时间:2019-06-08

本文共 2076 字,大约阅读时间需要 6 分钟。

Future接口代表异步计算的结果,并且提供方法来检测异步过程的进展。Callable接口与Runnable接口比较类似,提供线程的执行体,即run方法的内容。

Future与Callable结合使用开启一个新线程执行,最大的特点是能提供返回值,这样也就能实现类似同步执行的情况,看以下示例,在新线程中模拟5s的耗时操作,使用future.get将阻塞等待返回结果。

package demo.thread;import java.util.concurrent.Callable;import java.util.concurrent.ExecutionException;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.Future;public class CallableDemo {    public static void main(String[] args) throws InterruptedException,            ExecutionException {        ExecutorService executorService = Executors.newCachedThreadPool();        Future
future = executorService.submit(new Callable
() { @Override public String call() throws Exception { Thread.sleep(5000); return "future result"; } }); System.out.println(System.currentTimeMillis()); System.out.println(future.get()); System.out.println(System.currentTimeMillis()); }}

执行结果如下:

1562077654406

future result
1562077659407

FutureTask间接实现了Runnable和Future接口,同样可以实现上述功能,如下:

package demo.thread;import java.util.concurrent.Callable;import java.util.concurrent.ExecutionException;import java.util.concurrent.FutureTask;public class FutureTaskDemo {    public static void main(String[] args) throws InterruptedException,            ExecutionException {        FutureTask
futureTask = new FutureTask
( new Callable
() { @Override public String call() throws Exception { Thread.sleep(5000); return "future result"; } }); new Thread(futureTask).start(); System.out.println(System.currentTimeMillis()); System.out.println(futureTask.get()); System.out.println(System.currentTimeMillis()); }}

执行结果如下:

1562077797983

future result
1562077802985

 

 

转载于:https://www.cnblogs.com/silenceshining/p/11123496.html

你可能感兴趣的文章
20180711
查看>>
Js常见的创建对象
查看>>
IOS拖动
查看>>
httpclient的使用
查看>>
Kafka集群副本分配算法解析
查看>>
vue单页面条件下添加类似浏览器的标签页切换功能
查看>>
lambda表达式10个示例——学习笔记
查看>>
python 文件操作
查看>>
Java多线程之后台线程
查看>>
浏览器兼容性
查看>>
非均衡分类问题的思考与问题与解决思路
查看>>
头文件与extern
查看>>
python开发技术详解(三) 进阶的语法
查看>>
LeetCode Missing Number
查看>>
Linux 网络(连接)相关参数作用
查看>>
鼠标事件先后顺序
查看>>
洛谷P2756 飞行员配对方案问题
查看>>
在java中删除数组元素的练习
查看>>
[No0000B7]If else 与 三元表达式? : 效率对比
查看>>
python中的可迭代对象与迭代器
查看>>