CompletableFuture API জাভায় অ্যাসিঙ্ক্রোনাস প্রোগ্রামিং-এর জন্য ব্যবহৃত হয়। অর্থাৎ আমরা নন-ব্লকিং কোড লিখতে পারি একটি টাস্ক আলাদা থ্রেডে রান করে main() থ্রেড থেকে আলাদা করে এবং main() থ্রেডকে এর প্রগ্রেস, কমপ্লিশন বা ফেইলার সম্পর্কে নোটিফাই করে। জাভা ৯-এ CompletableFuture API-তে কিছু উন্নতি আনা হয়েছে, সেগুলো হলো: "টাইমআউট ও ডिले সাপোর্ট", "সাবক্লাসিং-এর জন্য উন্নত সাপোর্ট" এবং "নতুন ফ্যাক্টরি মেথড যোগ"।
টাইমআউট ও ডिले সাপোর্ট
public CompletableFuture<T> orTimeout(long timeout, TimeUnit unit)
উপরের মেথডটি ব্যবহার করে স্পেসিফাই করা যায় যে যদি টাস্ক নির্দিষ্ট সময়ের মধ্যে কমপ্লিট না হয়, তবে প্রোগ্রাম থেমে যাবে এবং TimeoutException থ্রো করবে।
public CompletableFuture<T> completeOnTimeout(T value, long timeout, TimeUnit unit)
উপরের মেথড CompletableFuture-কে প্রদত্ত ভ্যালু দিয়ে কমপ্লিট করে। যদি সেটি দেওয়া টাইমআউটের আগে কমপ্লিট না হয়।
সাবক্লাসিং-এর জন্য উন্নত সাপোর্ট
public Executor defaultExecutor()
উপরের মেথড ডিফল্ট এক্সিকিউটর রিটার্ন করে যা অ্যাসিঙ্ক মেথডগুলো ব্যবহার করে যেগুলো এক্সিকিউটর শো করে না। সাবক্লাসে এটি ওভাররাইড করা যায় কমপক্ষে একটি ইন্ডিপেন্ডেন্ট থ্রেড দেয়া এক্সিকিউটর রিটার্ন করতে।
public <U> CompletableFuture<U> newIncompleteFuture()
উপরের মেথড স্পেসিফিকেশন অনুযায়ী রিটার্ন হওয়া একটি নতুন ইনকমপ্লিট CompletableFuture রিটার্ন করে যা CompletionStage মেথড দ্বারা রিটার্ন হবে।
নতুন ফ্যাক্টরি মেথড
public static <U> CompletableFuture<U> completedFuture(U value)
উপরের ফ্যাক্টরি মেথড একটি নতুন CompletableFuture রিটার্ন করে যা ইতিমধ্যে প্রদত্ত ভ্যালু দিয়ে অকম্প্লিশড হয়েছে।
public static <U> CompletionStage<U> completedStage(U value)
উপরের ফ্যাক্টরি মেথড একটি নতুন CompletionStage রিটার্ন করে যা আগে থেকে প্রদত্ত ভ্যালু দিয়ে অকম্প্লিশড হয়েছে এবং শুধু CompletionStage ইন্টারফেসে উপলব্ধ মেথডগুলোর সাথে কম্প্যাটিবল।