import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.*;
/**
* 场景:
* 调用接口检查各个国家业务线的数据同步情况
* 每个线程查询一个同步任务
* 提高查询效率
*/
class Scratch {
public static void main(String[] args) {
CountDownLatch countDownLatch = new CountDownLatch(2);
ExecutorService executorService = Executors.newFixedThreadPool(5);
List<Future> futures = new ArrayList<>();
Future<String> futureRusultA = executorService.submit(new Callable<String>() {
@Override
public String call() {
String resultA = null;
try {
Thread.sleep(1000);
resultA = "child thread one over";
System.out.println(resultA);
} catch (InterruptedException ex) {
ex.printStackTrace();
} finally {
countDownLatch.countDown();
return resultA;
}
}
});
futures.add(futureRusultA);
Future<String> futureResultB = executorService.submit(new Callable<String>() {
@Override
public String call() {
String resultB = null;
try {
Thread.sleep(10000);
resultB = "child thread two over";
System.out.println(resultB);
} catch (InterruptedException ex) {
ex.printStackTrace();
} finally {
countDownLatch.countDown();
}
return resultB;
}
});
futures.add(futureResultB);
boolean flag = true;
try {
flag = countDownLatch.await(15, TimeUnit.SECONDS);
} catch (Exception ex) {
ex.printStackTrace();
}
System.out.println("是否未超时:" + flag);
if (!flag) {
executorService.shutdownNow();
} else {
for (Future f : futures) {
try {
System.out.println(f.get(2, TimeUnit.SECONDS));
} catch (InterruptedException | ExecutionException | TimeoutException ex) {
ex.printStackTrace();
}
}
executorService.shutdownNow();
}
}
}
【多线程】多线程异步调用线上场景:一个接口执行多个查询任务
猜你喜欢
转载自blog.csdn.net/t1g2q3/article/details/103794796
今日推荐
周排行