जावा में कार्य कतारें: java.util.concurrent के साथ अवलोकन और कार्यान्वयन

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

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

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

जावा में कार्य कतारें: मल्टीथ्रेडिंग और अतुल्यकालिक प्रसंस्करण के लिए पूर्ण मार्गदर्शिका



आधुनिक जावा विकास में, मल्टीथ्रेडेड वातावरण में कार्यों का कुशल प्रबंधन प्रदर्शन की आधारशिला है। कार्य कतारें (Task Queues) अतुल्यकालिक प्रसंस्करण, लोड संतुलन और थ्रेड्स के बीच अंतःक्रिया को व्यवस्थित करने के लिए सबसे शक्तिशाली और लचीले उपकरणों में से एक हैं। इस लेख में, हम विस्तार से समझेंगे कि जावा में कार्य कतारें कैसे काम करती हैं, मानक लाइब्रेरी java.util.concurrent कौन से कार्यान्वयन प्रदान करती है, और व्यवहार में उन्हें सही तरीके से कैसे लागू किया जाए।



कार्य कतार क्या है और इसकी आवश्यकता क्यों है?



कार्य कतार एक डेटा संरचना है जो FIFO (first-in, first-out) सिद्धांत पर काम करती है, जो उत्पादक थ्रेड्स को कार्य जोड़ने और उपभोक्ता थ्रेड्स को उन्हें निकालने और निष्पादित करने की अनुमति देती है। कतारों का उपयोग करने के मुख्य लाभ:

  • जिम्मेदारी का विभाजन: कार्य बनाने वाला कोड उस कोड पर निर्भर नहीं करता जो उन्हें निष्पादित करता है।
  • लोड संतुलन: कार्य कार्यशील थ्रेड्स के बीच समान रूप से वितरित होते हैं।
  • बफरिंग: यदि उपभोक्ता कार्यों को संसाधित करने में सक्षम नहीं हैं, तो कतार अस्थायी रूप से कार्यों को संग्रहीत कर सकती है।
  • पीक लोड प्रबंधन: अनुरोधों की अचानक बाढ़ आने पर सिस्टम क्रैश नहीं होता।


BlockingQueue के मुख्य कार्यान्वयन



जावा में, कार्य कतारों के लिए केंद्रीय इंटरफ़ेस BlockingQueue है। यह सामान्य कतार को उन विधियों के साथ विस्तारित करता है जो थ्रेड को तब तक ब्लॉक करते हैं जब तक संचालन संभव नहीं हो जाता (उदाहरण के लिए, स्थान खाली होने तक प्रतीक्षा करना)। आइए सबसे लोकप्रिय कार्यान्वयन देखें:



1. ArrayBlockingQueue

निश्चित क्षमता वाली ऐरे-आधारित कतार। उन परिदृश्यों के लिए उपयुक्त जहां कार्यों की अधिकतम संख्या पहले से ज्ञात हो (उदाहरण के लिए, DB कनेक्शन पूल)।



import java.util.concurrent.ArrayBlockingQueue;import java.util.concurrent.BlockingQueue;

public class ArrayBlockingQueueExample { public static void main(String[] args) throws InterruptedException { // 10 तत्वों की कतार बनाएं BlockingQueue<String> queue = new ArrayBlockingQueue<>(10);

// उत्पादक कार्य जोड़ता है queue.put("कार्य 1"); queue.put("कार्य 2");

// उपभोक्ता कार्य लेता है String task = queue.take(); // यदि कतार खाली है तो ब्लॉक हो जाता है System.out.println("संसाधित: " + task); }}


2. LinkedBlockingQueue

लिंक्ड लिस्ट-आधारित कतार। यह सीमित (यदि capacity निर्दिष्ट है) या व्यावहारिक रूप से असीमित हो सकती है। अप्रत्याशित लोड के साथ "उत्पादक-उपभोक्ता" पैटर्न को लागू करने के लिए आदर्श।



import java.util.concurrent.BlockingQueue;import java.util.concurrent.LinkedBlockingQueue;

public class LinkedBlockingQueueExample { public static void main(String[] args) { BlockingQueue<Integer> queue = new LinkedBlockingQueue<>(100);

// उत्पादक थ्रेड new Thread(() -> { for (int i = 0; i < 50; i++) { try { queue.put(i); System.out.println("जोड़ा गया: " + i); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } } }).start();

// उपभोक्ता थ्रेड new Thread(() -> { while (true) { try { Integer value = queue.take(); System.out.println("निकाला गया: " + value); } catch (InterruptedException e) { Thread.currentThread().interrupt(); break; } } }).start(); }}


3. PriorityBlockingQueue

असीमित

अनुशंसाएँ