异步调用
1 package code; 2 3 import java.util.Optional; 4 import java.util.concurrent.Callable; 5 import java.util.concurrent.ExecutorCompletionService; 6 import java.util.concurrent.Executors; 7 import java.util.concurrent.ScheduledExecutorService; 8 import java.util.concurrent.TimeUnit; 9 10 /** 11 * 12 * @param toDo 13 * @return 14 */ 15 public class ParallelTest { 16 17 private static final ScheduledExecutorService newScheduledThreadPool = Executors.newScheduledThreadPool(3); 18 19 public static Optional<String> doCheck(String toDo) { 20 ExecutorCompletionService<Optional<String>> completionService = new ExecutorCompletionService(newScheduledThreadPool); 21 //任务1 22 completionService.submit(new Callable<Optional<String>>() { 23 @Override 24 public Optional<String> call() throws Exception { 25 Optional<String> res = null;//TODO 26 if (res.isPresent()) { 27 return Optional.of("TODO"); 28 } 29 return Optional.empty(); 30 31 } 32 }); 33 //任务2 34 completionService.submit(new Callable<Optional<String>>() { 35 @Override 36 public Optional<String> call() throws Exception { 37 Optional<String> res = null;//TODO 38 if (res.isPresent()) { 39 return Optional.of("TODO"); 40 } 41 return Optional.empty(); 42 } 43 }); 44 //任务2 45 completionService.submit(new Callable<Optional<String>>() { 46 @Override 47 public Optional<String> call() throws Exception { 48 Optional<String> res = null;//TODO 49 if (res.isPresent()) { 50 return Optional.of("TODO"); 51 } 52 return Optional.empty(); 53 } 54 }); 55 56 //任务数 57 int taskSize = 3; 58 try { 59 for (int i=0;i<taskSize;i++) { 60 Optional<String> ress = completionService.take().get(3, TimeUnit.SECONDS); 61 if(ress.isPresent()) { 62 return ress; 63 } 64 } 65 }catch (Exception e) { 66 return Optional.of("异常"); 67 } 68 return Optional.empty(); 69 } 70 }