बीच क्या अंतर है 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
ब्लॉक।