异步调用

 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 }

 

posted @ 2022-06-27 14:13  心动如雷  阅读(20)  评论(0编辑  收藏  举报