Java线程总结(十三):并发包------线程返回结果Callable和 Future

    xiaoxiao2022-06-22  30

    <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("***************"); } }

    运行结果:

    转载请注明原文地址: https://ju.6miu.com/read-1122630.html

    最新回复(0)