Java Academy · पाठ

StructuredTaskScope

Subtasks को fork और join करें

पाठ 2, कुल 4 में से13 चरण

StructuredTaskScope, CoddyKit पर Java Academy का एक निःशुल्क पाठ है। यह 4 में से 2वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह Java Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Java Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

StructuredTaskScope से परिचय

StructuredTaskScope संरचित समवर्तीता का मुख्य एपीआई है। आप एक scope खोलते हैं, उपकार्यों को fork करते हैं, उनके लिए प्रतीक्षा करने हेतु join करते हैं और फिर उनके परिणाम पढ़ते हैं।

यह एक पूर्वावलोकन सुविधा है, इसलिए संकलन और चलाने के लिए --enable-preview का उपयोग करें।

मूल जीवनचक्र

हर उपयोग में यही चार चरणों की लय होती है:

  • संसाधन-प्रबंधन वाले ब्लॉक में scope खोलें
  • एक या अधिक उपकार्यों को fork करें, जिनमें से प्रत्येक Subtask संदर्भ लौटाता है
  • पूरा होने की प्रतीक्षा करने के लिए join करें
  • get() के माध्यम से प्रत्येक उपकार्य का परिणाम पढ़ें

fork एक संदर्भ लौटाता है

fork(Callable) उपकार्य को वर्चुअल थ्रेड पर तुरंत शुरू करता है और एक Subtask लौटाता है। join() के लौटने से पहले आपको इसके get() को कॉल नहीं करना चाहिए।

एक पूर्ण उदाहरण

यहाँ दो उपकार्य समवर्ती रूप से चलते हैं। परिणाम पढ़ने से पहले दोनों का पूरा होना आवश्यक है। इसमें ShutdownOnFailure नामक अंतर्निर्मित नीति का उपयोग किया गया है।

import java.util.concurrent.StructuredTaskScope;

public class Main {
    public static void main(String[] args) throws Exception {
        try (var scope = new StructuredTaskScope.ShutdownOnFailure()) {
            var name = scope.fork(() -> "Grace");
            var count = scope.fork(() -> 3);
            scope.join();
            scope.throwIfFailed();
            System.out.println(name.get() + " placed " + count.get() + " orders");
        }
    }
}

पहले join, फिर पढ़ें

क्रम का नियम सख्त है: fork, फिर join, फिर get। join() पूरा होने से पहले किसी उपकार्य पर get() कॉल करने पर IllegalStateException उत्पन्न होता है।

यही नियम जीवनकाल को संरचित बनाए रखता है।

उपकार्य की अवस्थाएँ

join() के बाद प्रत्येक Subtask एक state() बताता है:

  • SUCCESS, जिसमें get() से परिणाम मिलता है
  • FAILED, जिसमें exception() से अपवाद मिलता है
  • UNAVAILABLE, यदि वह कभी पूरा ही नहीं हुआ

कई उपकार्य

आप जितने चाहें उतने उपकार्यों को fork कर सकते हैं; प्रत्येक को अपना वर्चुअल थ्रेड मिलता है। स्वतंत्र कॉल के एक समूह में कार्य फैलाने का यही तरीका है।

import java.util.*;
import java.util.concurrent.StructuredTaskScope;

public class Main {
    public static void main(String[] args) throws Exception {
        try (var scope = new StructuredTaskScope.ShutdownOnFailure()) {
            List<StructuredTaskScope.Subtask<Integer>> tasks = new ArrayList<>();
            for (int i = 1; i <= 5; i++) {
                final int n = i;
                tasks.add(scope.fork(() -> n * n));
            }
            scope.join();
            scope.throwIfFailed();
            int total = tasks.stream().mapToInt(StructuredTaskScope.Subtask::get).sum();
            System.out.println("Sum of squares 1..5 = " + total);
        }
    }
}

थ्रेड का स्वामी scope है

scope एक AutoCloseable है। try ब्लॉक समाप्त होने पर close() यह सुनिश्चित करता है कि प्रत्येक उपकार्य थ्रेड समाप्त हो चुका हो। कोई रिसाव संभव नहीं है।

इसीलिए आपको इसका उपयोग हमेशा संसाधन-प्रबंधन वाले try ब्लॉक के भीतर करना चाहिए।

अंतर्निर्मित नीतियाँ

JDK दो तैयार shutdown नीतियाँ प्रदान करता है:

  • ShutdownOnFailure: किसी भी उपकार्य के विफल होने पर बाकी को रद्द करें
  • ShutdownOnSuccess: किसी एक के सफल होते ही बाकी को रद्द करें

आप अपनी तर्क-पद्धति के लिए StructuredTaskScope का उपवर्ग भी बना सकते हैं।

उसी थ्रेड से join

केवल वही थ्रेड जिसने scope खोला है, उसमें fork कर सकता है और join कॉल कर सकता है। उपकार्य अपने स्वामी scope तक सीमित रहते हैं, जिससे वृक्ष सही ढंग से बना रहता है।

संकलन और चलाने के विकल्प

क्योंकि यह एपीआई पूर्वावलोकन में है, इसलिए इसे इस प्रकार बनाएँ:

  • javac --release 21 --enable-preview Main.java
  • java --enable-preview Main

इस विकल्प के बिना संकलन या चलाने के समय त्रुटि मिलेगी।

त्वरित जाँच

अनिवार्य कॉल क्रम याद करें।

पुनरावृत्ति

आपने StructuredTaskScope एपीआई सीखा:

  • संसाधन-प्रबंधन वाले try ब्लॉक में खोलें, फिर fork, join और get करें
  • प्रत्येक उपकार्य अपने वर्चुअल थ्रेड पर चलता है
  • scope बंद होने से पहले सभी उपकार्यों के समाप्त होने की गारंटी देता है
  • --enable-preview आवश्यक है

अगला विषय: विफलता पर बंद करने और सफलता पर बंद करने वाली नीतियों का विस्तृत अध्ययन।

शुरुआत निःशुल्क

एआई शिक्षक के साथ Java सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
104
पाठ
374

अक्सर पूछे जाने वाले प्रश्न

क्या “StructuredTaskScope” पाठ निःशुल्क है?

हाँ—“StructuredTaskScope” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और Java Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। Java Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“StructuredTaskScope” में मैं क्या सीखूँगा?

Subtasks को fork और join करें आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Java Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या Java Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Java Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 2वाँ पाठ है।

“StructuredTaskScope” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस Java Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर Java Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. Structured Concurrency मॉडल
  2. StructuredTaskScope
  3. विफलता और सफलता पर बंद करना
  4. त्रुटि प्रबंधन और रद्द करना
← Java Academy पर वापस जाएँ