没有合适的资源?快使用搜索试试~ 我知道了~
Java 多线程的返回对象和资源独享线程.docx
资源推荐
资源详情
资源评论
Java 多线程的返回对象和资源独享线程
1. 多线程的返回对象-Future
1.1 Future
如果你在创建线程时,使用的是 Runnable 接口,那么此时你是无法获取线程执行结果的,如
果想要获取线程的执行结果,需要实现 Callable 接口,示例如下:
此时通过 ExecutorService.submit() 进行提交,得到的是一个 Future 对象,它包含了线程的执
行结果,当你调用其 get() 方法时,它会阻塞直至获取到线程的返回结果。
1.2 FutureTask
使用 Callable 接口的限制是:其只能使用线程池提交,而不能使用单独的线程进行提交。如果
想要使用单独的线程提交,可以使用 FutureTask 对其进行包装,FutureTask 是 Runnable 接口
public class J0_Callable {
static class Task implements Callable<Integer> {
@Override
public Integer call() throws InterruptedException {
Thread.sleep(3000);
return 100;
}
}
public static void main(String[] args) throws ExecutionException, InterruptedException {
ExecutorService executors = Executors.newSingleThreadExecutor();
Future<Integer> submit = executors.submit(new Task());
System.out.println("计算结果为:" + submit.get());
executors.shutdown();
}
}
的实现类,可以用于任何场景下的提交,示例如下:
1.3 CompletableFuture
CompletableFuture 是 JDK 8 提供的增强后 Future ,它支持流式调用,等待唤醒等一系列新的
功能:
static class Task implements Callable<Integer> {
@Override
public Integer call() throws InterruptedException {
Thread.sleep(3000);
return 100;
}
}
public static void main(String[] args) throws ExecutionException, InterruptedException {
FutureTask<Integer> futureTask01 = new FutureTask<>(new Task());
FutureTask<Integer> futureTask02 = new FutureTask<>(new Task());
// 使用独立的线程执行
new Thread(futureTask01).start();
ExecutorService executorService = Executors.newSingleThreadExecutor();
// 使用线程池提交
executorService.submit(futureTask02);
System.out.println("futureTask01 计算结果为:" + futureTask01.get());
System.out.println("futureTask02 计算结果为:" + futureTask01.get());
executorService.shutdown();
}
1.3.1 等待唤醒
剩余12页未读,继续阅读
资源评论
shangjg3
- 粉丝: 1136
- 资源: 101
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功