JDK1.5 获取线程执行结果 Callable Future
程序员文章站
2022-05-28 18:23:33
...
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; import java.util.concurrent.TimeUnit; /** * Callable Future (类是有回调的 线程池任务) 可以获取 线程执行后的 结果(无序的) */ public class CallableAndFuture { /** * @param args * @throws ExecutionException * @throws InterruptedException */ public static void main(String[] args) throws InterruptedException,Exception { ExecutorService threadPool=Executors.newSingleThreadExecutor(); // 提交当个任务 然后获取等待结果 Future<String> future=threadPool.submit(new Callable<String>() { @Override public String call() throws Exception { // TODO Auto-generated method stub Thread.sleep(2000); return "Hello: "+Thread.currentThread().getName(); } }); System.out.println("等待结果中..."); //什么时候有结果后 再获取结果 System.out.println("结果为:"+future.get()); //等待 1秒后 获取结果 没有取到结果就算了 System.out.println("结果为:"+future.get(1, TimeUnit.SECONDS)); threadPool.shutdown(); //批量提交任务 然后 循环获取 执行后的结果 ExecutorService threadPool1=Executors.newFixedThreadPool(10); CompletionService<Integer> completionService=new ExecutorCompletionService<Integer>(threadPool1); for (int i = 0; i < 10; i++) { final int seq=i; completionService.submit(new Callable<Integer>() { @Override public Integer call() throws Exception { // TODO Auto-generated method stub Thread.sleep(new Random().nextInt(5000)); return seq; } }); } System.out.println("2等待结果中..."); for (int i = 0; i < 10; i++) { System.out.println(completionService.take().get()); } threadPool1.shutdown(); } }
上一篇: phpExcel 乱码有关问题