import org.springframework.scheduling.concurrent.CustomizableThreadFactory;
import java.util.*;
import java.util.concurrent.*;
import java.util.stream.Collectors;
public class TestCompletableFuture {
public static void main(String[] args) {
try {
for (int i = 0; i < 200; i++) {
doHandleBidding();
}
} catch (Exception e) {
e.printStackTrace();
}
}
private static void doHandleBidding() throws InterruptedException, ExecutionException {
TestCompletableFuture TestCompletableFuture = new TestCompletableFuture();
ThreadFactory springThreadFactory = new CustomizableThreadFactory("bidding-pool-");
ThreadPoolExecutor executor = new ThreadPoolExecutor(5, 5, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingDeque<>(25),
springThreadFactory, new ThreadPoolExecutor.CallerRunsPolicy());
List<Integer> countList = new ArrayList<>();
for (int i = 1; i <= 5; i++) {
countList.add(i);
}
List<CompletableFuture<Integer>> completableFutureList =
countList.stream().map(i -> {
int finalI = i;
return CompletableFuture.supplyAsync(() -> {
System.out.println(Thread.currentThread().getName() + " ] [ " + Thread.currentThread().getId());
Integer res = null;
try {
res = TestCompletableFuture.obtainData().get(finalI);
} catch (Exception e) {
e.printStackTrace();
}
return res;
}, executor);
}).collect(Collectors.toList());
List<Integer> biddingList = completableFutureList.stream().map(CompletableFuture::join).filter(Objects::nonNull).collect(Collectors.toList());
executor.shutdown();
biddingList.forEach(biddingNo -> System.out.println(biddingNo));
}
public Map<Integer, Integer> obtainData() throws Exception {
Map<Integer, Integer> biddingNoMap = new HashMap<>();
biddingNoMap.put(1, 23);
biddingNoMap.put(2, 51);
TimeUnit.MILLISECONDS.sleep(5);
biddingNoMap.put(3, 7);
biddingNoMap.put(4, 98);
biddingNoMap.put(5, 33);
return biddingNoMap;
}
}
CompletableFuture实现异步并阻塞获取返回结果
最新推荐文章于 2024-07-26 17:03:00 发布