जावा में एसिंक्रोनस प्रोग्रामिंग: व्यावहारिक पूर्ण गाइड

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

जावा में एसिंक्रोनस प्रोग्रामिंग का परिचय

\n\n

आधुनिक अनुप्रयोगों में उच्च प्रदर्शन और प्रतिक्रियाशीलता की आवश्यकता होती है। उपयोगकर्ता यह प्रतीक्षा करने को तैयार नहीं होते कि एप्लिकेशन डेटाबेस क्वेरी को संसाधित करे या नेटवर्क कॉल करे। यहाँ एसिंक्रोनस प्रोग्रामिंग जावा में सहायक होती है — यह एक दृष्टिकोण है जो लंबी अवधि के संचालन की प्रतीक्षा करते समय मुख्य निष्पादन थ्रेड को ब्लॉक नहीं करता है।

\n\n

पारंपरिक मल्टीथ्रेडिंग के विपरीत, जहाँ आप स्पष्ट रूप से थ्रेड्स का प्रबंधन करते हैं, एसिंक्रोनस प्रोग्रामिंग उच्च-स्तरीय एब्स्ट्रैक्शन प्रदान करती है। मैन्युअल रूप से नए थ्रेड बनाने के बजाय, आप CompletableFuture, ExecutorService और Java Concurrency API द्वारा प्रदान किए गए अन्य टूल का उपयोग करते हैं।

\n\n

इस लेख में, हम व्यावहारिक उदाहरणों के साथ जावा में एसिंक्रोनस प्रोग्रामिंग की प्रमुख अवधारणाओं को समझेंगे। आप सीखेंगे कि एसिंक्रोनस कार्यों को कैसे संभालें, उन्हें श्रृंखलाओं में कैसे जोड़ें और मल्टीथ्रेडिंग के साथ प्रभावी ढंग से कैसे काम करें।

\n\n

जावा में एसिंक्रोनस प्रोग्रामिंग के मुख्य उपकरण

\n\n

1. CompletableFuture — एसिंक्रोनसिटी का आधार

\n\n

CompletableFuture एक क्लास है जो Java 8 में आया और एसिंक्रोनस प्रोग्रामिंग के लिए एक शक्तिशाली API प्रदान करता है। यह एसिंक्रोनस कार्यों को बनाने, उन्हें संयोजित करने, त्रुटियों को संभालने और परिणामों को रूपांतरित करने की अनुमति देता है।

\n\n

एक सरल उदाहरण देखें जो एसिंक्रोनस कार्य बनाने और निष्पादित करने को दर्शाता है:

\n\n
import java.util.concurrent.CompletableFuture;\nimport java.util.concurrent.ExecutionException;\n\npublic class AsyncExample {\n    public static void main(String[] args) throws ExecutionException, InterruptedException {\n        // एसिंक्रोनस कार्य बनाएँ\n        CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {\n            try {\n                Thread.sleep(1000); // लंबी अवधि के संचालन का अनुकरण\n            } catch (InterruptedException e) {\n                Thread.currentThread().interrupt();\n            }\n            return "एसिंक्रोनस संचालन का परिणाम";\n        });\n\n        // पूर्णता हैंडलर जोड़ें\n        future.thenAccept(result -> System.out.println("परिणाम प्राप्त: " + result));\n\n        // मुख्य थ्रेड काम करता रहता है\n        System.out.println("मुख्य थ्रेड निष्पादन जारी रखता है");\n\n        // पूर्णता की प्रतीक्षा करें (केवल प्रदर्शन के लिए)\n        future.get();\n    }\n}
\n\n

ध्यान दें कि supplyAsync() डिफ़ॉल्ट रूप से ForkJoinPool.commonPool() का उपयोग करता है। यह एक थ्रेड पूल है जो समानांतर कार्यों के लिए अनुकूलित है।

\n\n

2. ExecutorService — थ्रेड पूल प्रबंधन

\n\n

एसिंक्रोनस कार्यों के निष्पादन पर अधिक सूक्ष्म नियंत्रण के लिए ExecutorService का उपयोग करें। यह आपको थ्रेड्स की संख्या, उनके व्यवहार और कार्य प्रसंस्करण रणनीति निर्धारित करने की अनुमति देता है।

\n\n
import java.util.concurrent.*;\n\npublic class ExecutorServiceExample {\n    public static void main(String[] args) {\n        // 4 थ्रेड्स का पूल बनाएँ\n        ExecutorService executor = Executors.newFixedThreadPool(4);\n\n        // कस्टम executor के साथ CompletableFuture बनाएँ\n        CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> {\n            try {\n                Thread.sleep(2000);\n            } catch (InterruptedException e) {\n                Thread.currentThread().interrupt();\n            }\n            return 42;\n        }, executor);\n\n        // परिणाम प्रसंस्करण\n        future.thenAccept(result -> {\n            System.out.println("परिणाम: " + result);\n            executor.shutdown(); // महत्वपूर्ण! पूल बंद करें\n        });\n\n        System.out.println("मुख्य थ्रेड ब्लॉक नहीं होता");\n    }\n}
\n\n

महत्वपूर्ण: संसाधन लीक से बचने के लिए हमेशा ExecutorService को shutdown() या shutdownNow() से बंद करें।

\n\n

3. संयोजन

ब्लॉग

पुस्तक अनुशंसाएँ