ফিউচার
ফিউচার জাভা 5 (2004) এ চালু হয়েছিল। এগুলি মূলত কোনও অপারেশনের ফলাফলের জন্য স্থানধারক যা এখনও শেষ হয়নি। অপারেশন শেষ হয়ে গেলে, Future
ফলাফলটি এতে থাকবে। উদাহরণস্বরূপ, একটি অপারেশন একটি চালানো বা কলযোগ্য উদাহরণ হতে পারে যা এক্সিকিউটারসেবারে জমা দেওয়া হয় । ক্রিয়াকলাপের জমা দেওয়া সংস্থাটিFuture
অপারেশনটি ডোন () হয়েছে কিনা তা যাচাই করতে ব্যবহার করতে বা ব্লকিং গেট () পদ্ধতিটি ব্যবহার করে এটি শেষ হওয়ার জন্য অপেক্ষা করতে পারে ।
উদাহরণ:
/**
* A task that sleeps for a second, then returns 1
**/
public static class MyCallable implements Callable<Integer> {
@Override
public Integer call() throws Exception {
Thread.sleep(1000);
return 1;
}
}
public static void main(String[] args) throws Exception{
ExecutorService exec = Executors.newSingleThreadExecutor();
Future<Integer> f = exec.submit(new MyCallable());
System.out.println(f.isDone()); //False
System.out.println(f.get()); //Waits until the task is done, then prints 1
}
CompletableFutures
কমপ্লিটেবল ফিউচার জাভা 8 (2014) এ চালু হয়েছিল। এর সপক্ষে তাদের কাছে নিয়মিত ফিউচার, Google এর দ্বারা অনুপ্রাণিত একজন বিবর্তন হয় Listenable ফিউচার , অংশ পেয়ারা গ্রন্থাগার। এগুলি হ'ল ফিউচার যা আপনাকে শৃঙ্খলে এক সাথে কাজগুলি স্ট্রিং করার অনুমতি দেয়। আপনি কিছু কর্মী থ্রেডকে "কিছু টাস্ক এক্স করতে যান, এবং যখন আপনি শেষ করেন, এক্স এর ফলাফল ব্যবহার করে এই অন্য জিনিসটি করতে যান" বলতে তাদের ব্যবহার করতে পারেন। কমপ্লেটেবলফিউচার ব্যবহার করে, ফলাফলটির জন্য অপেক্ষা করার জন্য কোনও থ্রেডকে অবরুদ্ধ না করেই আপনি অপারেশনের ফলাফলের সাথে কিছু করতে পারেন। এখানে একটি সাধারণ উদাহরণ:
/**
* A supplier that sleeps for a second, and then returns one
**/
public static class MySupplier implements Supplier<Integer> {
@Override
public Integer get() {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
//Do nothing
}
return 1;
}
}
/**
* A (pure) function that adds one to a given Integer
**/
public static class PlusOne implements Function<Integer, Integer> {
@Override
public Integer apply(Integer x) {
return x + 1;
}
}
public static void main(String[] args) throws Exception {
ExecutorService exec = Executors.newSingleThreadExecutor();
CompletableFuture<Integer> f = CompletableFuture.supplyAsync(new MySupplier(), exec);
System.out.println(f.isDone()); // False
CompletableFuture<Integer> f2 = f.thenApply(new PlusOne());
System.out.println(f2.get()); // Waits until the "calculation" is done, then prints 2
}
RxJava
আরএক্সজাভা নেটফ্লিক্সে তৈরি প্রতিক্রিয়াশীল প্রোগ্রামিংয়ের পুরো লাইব্রেরি । এক নজরে, এটি জাভা 8 এর স্ট্রিমগুলির মতো দেখাবে । এটি অনেক বেশি শক্তিশালী ব্যতীত।
একইভাবে ফিউচারগুলিতে, আরএক্সজাভা প্রসেসিং পাইপলাইন তৈরি করতে একগুচ্ছ সিনক্রোনাস বা অ্যাসিনক্রোনাস অ্যাকশনগুলির স্ট্রিংয়ের জন্য ব্যবহার করা যেতে পারে। ফিউচারগুলির থেকে পৃথক, যা একক-ব্যবহারযোগ্য, আরএক্সজাভা শূন্য বা আরও বেশি আইটেমের স্ট্রিমে কাজ করে । অসীম সংখ্যক আইটেম সহ কখনও শেষ না হওয়া স্ট্রিম সহ। অপারেটরগুলির একটি অবিশ্বাস্য সমৃদ্ধ সেটকে এটি আরও অনেক নমনীয় এবং শক্তিশালী ধন্যবাদ ।
জাভা 8 এর স্ট্রিমের বিপরীতে, আরএক্সজাভাতে একটি ব্যাকপ্রেশার মেকানিজমও রয়েছে, এটি আপনার প্রসেসিং পাইপলাইনের বিভিন্ন অংশ বিভিন্ন থ্রেডে বিভিন্ন হারে পরিচালিত কেসগুলি পরিচালনা করতে দেয় ।
আরএক্স জাভা এর নেতিবাচক দিকটি হ'ল দৃ document় দলিল থাকা সত্ত্বেও জড়িত দৃষ্টান্তের পরিবর্তনের কারণে এটি শিখতে চ্যালেঞ্জিং লাইব্রেরি। আরএক্স কোডটি ডিবাগ করার জন্য একটি দুঃস্বপ্ন হতে পারে, বিশেষত যদি একাধিক থ্রেড জড়িত থাকে, এবং আরও খারাপ - যদি ব্যাকপ্রেসার প্রয়োজন হয়।
আপনি যদি এটিতে যেতে চান তবে অফিসিয়াল ওয়েবসাইটে বিভিন্ন টিউটোরিয়ালের পুরো পৃষ্ঠা রয়েছে, সাথে সাথে অফিসিয়াল ডকুমেন্টেশন এবং জাভাদোক । এছাড়াও আপনি যেমন ভিডিওগুলির কয়েকটিতে কটাক্ষপাত করা করতে পারেন এই এক যা Rx মধ্যে একটি সংক্ষিপ্ত ভূমিকা দেয় এবং Rx এবং ফিউচার মধ্যে পার্থক্য নিয়ে কথা বলেছেন।
বোনাস: জাভা 9 প্রতিক্রিয়াশীল স্ট্রিম
জাভা 9 এর প্রতিক্রিয়াশীল স্ট্রিমস ওরফে ফ্লো এপিআই হ'ল আরএক্সজবা 2 , আক্কা স্ট্রিমস এবং ভার্টেক্সের মতো বিভিন্ন প্রতিক্রিয়াশীল স্ট্রিম লাইব্রেরি দ্বারা প্রয়োগ করা ইন্টারফেসগুলির একটি সেট । সমস্ত গুরুত্বপূর্ণ ব্যাক-চাপ সংরক্ষণ করে তারা এই প্রতিক্রিয়াশীল গ্রন্থাগারগুলিকে আন্তঃসংযোগ করার অনুমতি দেয়।