মধ্যে পার্থক্য কি CompletableFuture.get()
এবং CompletableFuture.join()
?
নীচে আমার কোডটি দেওয়া হয়েছে:
List<String> process() {
List<String> messages = Arrays.asList("Msg1", "Msg2", "Msg3", "Msg4", "Msg5", "Msg6", "Msg7", "Msg8", "Msg9",
"Msg10", "Msg11", "Msg12");
MessageService messageService = new MessageService();
ExecutorService executor = Executors.newFixedThreadPool(4);
List<String> mapResult = new ArrayList<>();
CompletableFuture<?>[] fanoutRequestList = new CompletableFuture[messages.size()];
int count = 0;
for (String msg : messages) {
CompletableFuture<?> future = CompletableFuture
.supplyAsync(() -> messageService.sendNotification(msg), executor).exceptionally(ex -> "Error")
.thenAccept(mapResult::add);
fanoutRequestList[count++] = future;
}
try {
CompletableFuture.allOf(fanoutRequestList).get();
//CompletableFuture.allOf(fanoutRequestList).join();
} catch (InterruptedException | ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return mapResult.stream().filter(s -> !s.equalsIgnoreCase("Error")).collect(Collectors.toList());
}
আমি উভয় পদ্ধতি দিয়ে চেষ্টা করেছি কিন্তু ফলাফলের মধ্যে কোনও পার্থক্য দেখছি না।
get()
আপনার চেক করা ব্যতিক্রমগুলি ধরা দরকার। আপনি পরিবর্তিত হওয়ার সময় আপনার পার্থক্যটি লক্ষ্য করা উচিত , কারণ আপনিget()
উদ্দেশ্যমূলকভাবেjoin()
একটি সংকলক ত্রুটি পেয়ে যাবেন তাInterruptedException
নয় যে ব্লকের মধ্যেওExecutionException
ফেলে দেওয়া হবে নাtry
।