Trong Java 8 có hai cách để bắt đầu tính toán không đồng bộ - CompletableFuture
và ForkJoinTask
. Cả hai đều có vẻ tương tự nhau - các lớp bên trong của CompletableFuture
thậm chí mở rộng ForkJoinTask
.ForkJoinTask vs CompletableFuture
Có lý do nào để sử dụng cái này cho người khác không?
Một khác biệt quan trọng mà tôi có thể thấy là phương pháp đơn giản CompletableFuture.join
khối cho đến khi tương lai là đầy đủ (waitingGet
chỉ quay sử dụng một ManagedBlocker
), trong khi một ForkJoinTask.join
có thể ăn cắp công việc ra khỏi hàng đợi để giúp các công việc bạn đang tham gia vào hoàn thành.
Có lợi ích nào khác hay không?
Tôi cho rằng câu hỏi của tôi là nhiều hơn về thời điểm bạn sử dụng và không phải câu hỏi khác (giả sử bạn đang sử dụng FJP chung mặc định). Khi tham gia vào một CompletableFuture, nó có giúp hoàn thành nhiệm vụ bạn đang tham gia không? – thecoop
@thecoop Tôi không thấy làm thế nào u có thể thay thế một với khác, CompletableFuture là một lời hứa có hoạt động như sau đóApply và sau đóCompose, bây giờ nếu câu hỏi của bạn là khi nào tôi sử dụng ForkJoinTask? Tôi sẽ nói khi bạn viết các thuật toán song song của riêng mình –