फ्यूचर्स
वायदा जावा 5 (2004) में पेश किया गया था। वे मूल रूप से एक ऑपरेशन के परिणाम के लिए प्लेसहोल्डर हैं जो अभी तक समाप्त नहीं हुए हैं। एक बार ऑपरेशन खत्म हो जाने के बाद, Future
उस परिणाम को शामिल किया जाएगा। उदाहरण के लिए, एक ऑपरेशन एक हो सकता है Runnable या प्रतिदेय उदाहरण है कि एक को प्रस्तुत ExecutorService । ऑपरेशन का प्रस्तुतकर्ता यह 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 के सुनने योग्य फ्यूचर्स से प्रेरित हैं , जो कि अमरूद पुस्तकालय का हिस्सा है । वे फ्यूचर्स हैं जो आपको एक श्रृंखला में एक साथ कार्य करने की अनुमति देते हैं। आप "कुछ कार्य X करने के लिए कुछ कार्यकर्ता थ्रेड को बताने के लिए उनका उपयोग कर सकते हैं, और जब आप कर रहे हों, तो X के परिणाम का उपयोग करके यह अन्य कार्य करें"। कंप्लीटेबलफुटर्स का उपयोग करके, आप वास्तव में परिणाम की प्रतीक्षा करने के लिए एक थ्रेड को अवरुद्ध किए बिना ऑपरेशन के परिणाम के साथ कुछ कर सकते हैं। यहाँ एक सरल उदाहरण दिया गया है:
/**
* 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
नेटफ्लिक्स पर बनाई गई रिएक्टिव प्रोग्रामिंग के लिए RxJava पूरी लाइब्रेरी है । एक नज़र में, यह जावा 8 स्ट्रीम के समान प्रतीत होगा । यह है, सिवाय इसके कि यह बहुत अधिक शक्तिशाली है।
फ्यूचर्स के समान, एक प्रसंस्करण पाइपलाइन बनाने के लिए RxJava को सिंक्रोनस या एसिंक्रोनस क्रियाओं के एक समूह को एक साथ स्ट्रिंग करने के लिए इस्तेमाल किया जा सकता है। फ्यूचर्स के विपरीत, जो एकल-उपयोग वाले हैं, RxJava शून्य या अधिक वस्तुओं की धाराओं पर काम करता है । जिसमें अनंत संख्या में आइटम नहीं हैं। यह ऑपरेटरों के अविश्वसनीय रूप से समृद्ध सेट के लिए बहुत अधिक लचीला और शक्तिशाली धन्यवाद है ।
जावा 8 की धाराओं के विपरीत, RxJava भी एक है backpressure तंत्र है, जो यह मामले हैं जिनमें आपकी प्रसंस्करण पाइप लाइन के विभिन्न भागों अलग धागे में काम करते हैं, को संभालने के लिए अनुमति देता है अलग दरों पर ।
RxJava का नकारात्मक पक्ष यह है कि ठोस प्रलेखन के बावजूद, इसमें शामिल प्रतिमान के कारण सीखने के लिए एक चुनौतीपूर्ण पुस्तकालय है। Rx कोड डिबग करने का एक दुःस्वप्न भी हो सकता है, खासकर अगर कई थ्रेड्स शामिल हैं, और इससे भी बदतर - अगर बैकस्पेस की आवश्यकता है।
यदि आप इसे प्राप्त करना चाहते हैं, तो आधिकारिक वेबसाइट और आधिकारिक दस्तावेज़ और जावदोक पर विभिन्न ट्यूटोरियल का एक पूरा पृष्ठ है । आप इस तरह के कुछ वीडियो पर एक नज़र डाल सकते हैं जो आरएक्स में एक संक्षिप्त परिचय देता है और आरएक्स और फ़्यूचर्स के बीच के अंतर के बारे में भी बात करता है।
बोनस: जावा 9 रिएक्टिव स्ट्रीम
जावा 9 के रिएक्टिव स्ट्रीम्स उर्फ फ्लो एपीआई RxJava 2 , अक्का स्ट्रीम्स और वर्टेक्स जैसे विभिन्न प्रतिक्रियाशील स्ट्रीम लाइब्रेरी द्वारा कार्यान्वित इंटरफेसेस का एक सेट है । वे सभी महत्वपूर्ण पीठ-दबाव को संरक्षित करते हुए, इन प्रतिक्रियाशील पुस्तकालयों को आपस में जोड़ने की अनुमति देते हैं।