Android多线程研究(8)——Java5中Futrue获取线程返回结果
来源:互联网 发布:信用卡在淘宝怎么套现 编辑:程序博客网 时间:2024/05/16 05:05
我们先来看一下ExecutorService中的执行方法:
在上一篇中我们使用了execute方法启动线程池中的线程执行,这一篇我们来看看submit方法的使用:submit提交一个返回值的任务用于执行,返回一个表示任务的未决结果的 Future。该 Future 的 get 方法在成功完成时将会返回该任务的结果。
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 CallableAndFutrue {public static void main(String[] args) throws InterruptedException, ExecutionException {ExecutorService threadPool = Executors.newSingleThreadExecutor();Future<String> future = threadPool.submit(new Callable<String>() {@Overridepublic String call() throws Exception {Thread.sleep(2000);return "阳光小强";}});System.out.println(future.get());}}在上面代码中我们启动了一个线程,休眠了2秒后返回结果“阳光小强"
import java.util.concurrent.ExecutionException;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.Future;public class CallableAndFutrue {public static void main(String[] args) throws InterruptedException, ExecutionException {ExecutorService threadPool = Executors.newSingleThreadExecutor();Future future = threadPool.submit(new Runnable(){@Overridepublic void run() {try {Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}}});System.out.println(future.get());}}提交一个 Runnable 任务用于执行,并返回一个表示该任务的 Future。该 Future 的 get 方法在成功 完成时将会返回 null。
再看看最后一个submit,可以添加一个result,当线程执行完成后会返回该result
Future future = threadPool.submit(new Runnable(){@Overridepublic void run() {try {Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}}}, "阳光小强");如果我们提交多个任务(也就是开启多个线程)后如何有序的返回结果呢?
将生产新的异步任务与使用已完成任务的结果分离开来的服务。生产者 submit 执行的任务。使用者 take 已完成的任务,并按照完成这些任务的顺序处理它们的结果。例如,CompletionService 可以用来管理异步 IO ,执行读操作的任务作为程序或系统的一部分提交,然后,当完成读操作时,会在程序的不同部分执行其他操作,执行操作的顺序可能与所请求的顺序不同。
通常,CompletionService 依赖于一个单独的 Executor
来实际执行任务,在这种情况下,CompletionService 只管理一个内部完成队列。ExecutorCompletionService
类提供了此方法的一个实现。
import java.util.Random;import java.util.concurrent.Callable;import java.util.concurrent.ExecutionException;import java.util.concurrent.ExecutorCompletionService;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class CallableAndFutrue {public static void main(String[] args) throws InterruptedException, ExecutionException {ExecutorService threadPool = Executors.newFixedThreadPool(10);ExecutorCompletionService<Integer> ecs = new ExecutorCompletionService<>(threadPool);for(int i=0; i<10; i++){final int seq = i;ecs.submit(new Callable<Integer>() {@Overridepublic Integer call() throws Exception {Thread.sleep(new Random().nextInt(5000));return seq;}});}for(int i=0; i<10; i++){System.out.println(ecs.take().get());}}}
10 0
- Android多线程研究(8)——Java5中Futrue获取线程返回结果
- Android多线程研究(7)——Java5中的线程并发库
- Java5中线程池与线程结果返回
- 多线程 : 使用 Future 获取线程返回结果
- android——处理返回结果(仿获取电话号码)
- Android多线程研究(9)——线程锁Lock
- Android多线程研究(9)——线程锁Lock
- 多线程中线程执行器java5
- 【多线程】——Runnable如何获取线程执行结果?
- java concurrent—Futrue
- JAVA多线程—Java5中的线程并发库
- JDK5 获取线程返回结果
- 返回结果线程—等待单个线程(搬迁至此)
- Android(Java)之多线程结果返回——Future 、FutureTask、Callable、Runnable
- Java5线程池潜规则研究
- (五) Java多线程详解之Callable和Future阻塞获取线程返回结果
- Java5 多线程(二)--线程池
- Java5 多线程(二)--线程池
- Struts2 在页面定义变量 s:set标签
- android ota 升级包制作分析 (2 包结构)
- GD库
- 补 判断一个数为质数的算法
- Fastjson技术内幕
- Android多线程研究(8)——Java5中Futrue获取线程返回结果
- Spring Aop 报错error creating bean with name 'org.springframework.aop.config.internalAutoProxyCreator
- Cocos2d-x学习笔记(12)(CCControlSwitch开关、CCControlSlider滑动条、CCControlButton按钮)
- /etc/fstab和/etc/mtab的区别!
- 第15周程序阅读(1)
- Oracle 归档目录满了怎么办?
- CreateThread与_beginthread的区别
- [全国首发]Swift视频教程
- 上位机数据整理