Java线程总结(十三):并发包------线程返回结果Callable和 Future
2016-09-14 00:27
921 查看
<pre name="code" class="java">package com.ydj; import java.util.concurrent.Callable; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; public class CallableAndFutureTest { public static void main(String[] args) throws InterruptedException { ExecutorService threadPool = Executors.newSingleThreadExecutor(); Future<String> future = threadPool.submit(// 注意是submit new Callable<String>() { public String call() throws Exception { Thread.sleep(5000);// 休眠5s return "hello"; }; }); System.out.println("等待结果..."); try { // future.get()没有拿到结果就会一直等待 System.out.println("拿到结果:" + future.get());// 等到5s后拿到结果hello System.out.println("拿到结果后才执行"); } catch (Exception e) { e.printStackTrace(); } } }
package com.ydj; import java.util.Random; import java.util.concurrent.Callable; import java.util.concurrent.CompletionService; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorCompletionService; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class CallableAndFutureTest2 { public static void main(String[] args) throws InterruptedException { ExecutorService threadPool = Executors.newFixedThreadPool(3); //创建线程池,传递给completionService,用threadPool执行任务,执行的任务返回结果都是整数 CompletionService<Integer> completionService = new ExecutorCompletionService<Integer>(threadPool); for(int i=1;i<=10;i++){ final int num = i; completionService.submit(new Callable<Integer>() { @Override public Integer call() throws Exception { Thread.sleep(new Random().nextInt(5000)); System.out.println(Thread.currentThread().getName()+"线程,准备返回:"+num); return num; } }); } System.out.println("-----------------"); for(int i=0;i<10;i++){ try { //take获取第一个Future对象,用get获取结果 System.out.println("获取到:"+completionService.take().get()); } catch (ExecutionException e) { e.printStackTrace(); } } System.out.println("***************"); } }
运行结果:
相关文章推荐
- java并发多线程-返回执行结果(Callable和Future)(9)
- JAVA多线程实现方式主要有三种:继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实现有返回结果的多线程。其中前两种方式线程执行完后都没
- Java线程池及Future、Callable获得线程返回结果【Java线程池系列2】
- java Callable和Future并发调用,并且返回结果小例子
- Java线程池及Future、Callable获得线程返回结果【Java线程池系列2】
- JAVA 并发编程-返回执行结果(Callable和Future)(九)
- java并发:获取线程执行结果(Callable、Future、FutureTask)
- JAVA 并发编程-返回执行结果(Callable和Future)(九)
- java 使用Callable和Future返回线程执行的结果
- java多线程并发库高级应用 之 java5中的线程并发库--线程池、Callable&Future
- Java带有返回结果的新线程:Callable
- Android(Java)之多线程结果返回——Future 、FutureTask、Callable、Runnable
- 06____线程返回执行结果(Callable和Future)
- 多线程并发库高级应用 之 java5中的线程并发库--线程池、Callable&Future
- 10、java5线程池之返回结果的任务之Callable与Future
- Java线程和多线程(十三)——Callable,Future,FutureTask
- Java_并发线程_Future、FutureTask、Callable
- Java线程和多线程(十三)——Callable,Future,FutureTask
- (五) Java多线程详解之Callable和Future阻塞线程同步返回结果
- Java:多线程,线程池,使用CompletionService通过Future来处理Callable的返回结果