Thread_CallableAndFuture(线程池返回结果)
2016-08-02 14:18
323 查看
package com.gzhs.zsd.thread;
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;
import java.util.concurrent.Future;
/**
* 线程池Callable与Future应用
*/
public class Thread_CallableAndFuture {
}
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;
import java.util.concurrent.Future;
/**
* 线程池Callable与Future应用
*/
public class Thread_CallableAndFuture {
public static void main(String[] args) { //线程池提交一个任务, 返回结果测试 //Thread_getFuture(); //线程池提交一组任务, 返回结果测试 Thread_CompletionService(); } //线程提交并拿到Future返回结果 public static void Thread_getFuture(){ //创建一个单独线程 ExecutorService thredPool = Executors.newSingleThreadExecutor(); //线程池提交, 获取Future结果 Future<String> future = thredPool.submit(new Callable<String>() { @Override public String call() throws Exception { Thread.sleep(2000); return "正常"; } }); try { System.out.println("等待检查结果: "); System.out.println("拿到检查结果: " + future.get()); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } } //线程池提交一组Callable任务, 采用take方法获取已完成的的一个Callable任务的Future结果 public static void Thread_CompletionService(){ //创建一个10个大小的线程池 ExecutorService threadPool = Executors.newFixedThreadPool(10); //采用CompletionService提交一组任务 CompletionService<Integer> completionService = new ExecutorCompletionService<Integer>(threadPool); //循环提交10个人任务 for(int i = 1; i <= 10; i++){ final int task = i; completionService.submit(new Callable<Integer>() { @Override public Integer call() throws Exception { //随机等待 Thread.sleep(new Random().nextInt(10000)); return task; } }); } System.out.println("等待检查结果: "); //循环拿结果 for(int i = 1; i<= 10; i++){ Future<Integer> future = null; try { //如果,这里没拿到结果, 会一直等待之后, 拿到结果之后, 在往下执行 future = completionService.take(); System.out.println("拿到检查结果: " + future.get()); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } } }
}
相关文章推荐
- Java:多线程,线程池,使用CompletionService通过Future来处理Callable的返回结果
- Java线程池及Future、Callable获得线程返回结果【Java线程池系列2】
- Java:多线程,线程池,使用CompletionService通过Future来处理Callable的返回结果
- JAVA多线程实现方式主要有三种:继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实现有返回结果的多线程。其中前两种方式线程执行完后都没
- 10、java5线程池之返回结果的任务之Callable与Future
- Java线程池及Future、Callable获得线程返回结果【Java线程池系列2】
- Java:多线程,线程池,使用CompletionService通过Future来处理Callable的返回结果
- JAVA 线程池之Callable返回结果
- Java:多线程,线程池,使用CompletionService通过Future来处理Callable的返回结果
- JAVA多线程实现的三种方式(继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实现有返回结果的多线程)
- 开线程池在子线程下载,用接口回调与Handler返回结果
- Java5中线程池与线程结果返回
- Callable和Future实现调用任务并返回结果数据
- JAVA 并发编程-返回执行结果(Callable和Future)(九)
- 06____线程返回执行结果(Callable和Future)
- Java多线程Thread,Runnable, Callable<>和线程池(二)
- 使用Callable返回结果
- java Callable和Future并发调用,并且返回结果小例子
- Java--使用ExecutorCompletionService 管理线程池处理任务的返回结果
- Callable与Future的应用得到线程的返回结果(十)