Java Academy · पाठ

Virtual Threads बनाना

Thread.ofVirtual और executors

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

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

वर्चुअल थ्रेड बनाने के तरीके

Java वर्चुअल थ्रेड बनाने के लिए कई प्रवेश-बिंदु उपलब्ध कराता है। इनमें सबसे महत्वपूर्ण दो हैं: Thread.ofVirtual() बिल्डर और Executors.newVirtualThreadPerTaskExecutor() फ़ैक्टरी।

इस पाठ में हम एक-एक करके सभी तरीकों को देखेंगे।

बिल्डर: start

Thread.ofVirtual() एक बिल्डर लौटाता है। .start(runnable) को कॉल करने पर थ्रेड बनता है और तुरंत शुरू हो जाता है।

public class Main {
    public static void main(String[] args) throws InterruptedException {
        Thread t = Thread.ofVirtual().start(() ->
            System.out.println("Started directly"));
        t.join();
    }
}

बिल्डर: unstarted

जब आप थ्रेड को कॉन्फ़िगर करके बाद में शुरू करना चाहते हों, तब .unstarted(runnable) का उपयोग करें।

public class Main {
    public static void main(String[] args) throws InterruptedException {
        Thread t = Thread.ofVirtual().unstarted(() ->
            System.out.println("Started later"));
        System.out.println("Before start, alive? " + t.isAlive());
        t.start();
        t.join();
    }
}

पुनः उपयोग योग्य फ़ैक्टरी

बिल्डर .factory() के ज़रिए एक ThreadFactory बना सकता है। newThread को कॉल करने पर हर बार एक नया वर्चुअल थ्रेड मिलता है।

import java.util.concurrent.ThreadFactory;

public class Main {
    public static void main(String[] args) throws InterruptedException {
        ThreadFactory factory = Thread.ofVirtual().name("job-", 0).factory();
        Thread a = factory.newThread(() ->
            System.out.println(Thread.currentThread().getName()));
        Thread b = factory.newThread(() ->
            System.out.println(Thread.currentThread().getName()));
        a.start(); b.start();
        a.join(); b.join();
    }
}

सुविधाजनक विधि

Thread.startVirtualThread(runnable) एक ही कॉल में बिना नाम वाला वर्चुअल थ्रेड बनाने और शुरू करने का संक्षिप्त तरीका है।

public class Main {
    public static void main(String[] args) throws InterruptedException {
        Thread t = Thread.startVirtualThread(() ->
            System.out.println("One-liner virtual thread"));
        t.join();
    }
}

एक्जीक्यूटर वाला तरीका

कार्य-केंद्रित कोड के लिए Executors.newVirtualThreadPerTaskExecutor() को प्राथमिकता दें। यह हर भेजे गए कार्य के लिए एक नया वर्चुअल थ्रेड बनाता है।

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class Main {
    public static void main(String[] args) {
        try (ExecutorService exec = Executors.newVirtualThreadPerTaskExecutor()) {
            exec.submit(() -> System.out.println("task one"));
            exec.submit(() -> System.out.println("task two"));
        }
        System.out.println("All tasks submitted and completed");
    }
}

संसाधनों के साथ try ब्लॉक क्यों

Java 19 से ExecutorService, AutoCloseable को लागू करता है। संसाधनों के साथ try ब्लॉक में इसे बंद करने पर भेजे गए सभी कार्यों के पूरा होने तक प्रतीक्षा की जाती है।

इससे मैन्युअल shutdown और awaitTermination कॉल किए बिना सुव्यवस्थित और स्पष्ट रूप से संरचित शटडाउन मिलता है।

बहुत से कार्य भेजना

प्रति-कार्य एक्जीक्यूटर बहुत बड़ी संख्या में कार्यों को आसानी से संभाल लेता है। हर कार्य को अपना वर्चुअल थ्रेड मिलता है।

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.atomic.AtomicInteger;

public class Main {
    public static void main(String[] args) {
        AtomicInteger sum = new AtomicInteger();
        try (ExecutorService exec = Executors.newVirtualThreadPerTaskExecutor()) {
            for (int i = 1; i <= 1000; i++) {
                final int n = i;
                exec.submit(() -> sum.addAndGet(n));
            }
        }
        System.out.println("Sum 1..1000 = " + sum.get());
    }
}

Future के साथ परिणाम एकत्र करना

submit एक Future लौटाता है, इसलिए आप किसी भी एक्जीक्यूटर की तरह लौटाए गए मान एकत्र कर सकते हैं।

import java.util.concurrent.*;

public class Main {
    public static void main(String[] args) throws Exception {
        try (ExecutorService exec = Executors.newVirtualThreadPerTaskExecutor()) {
            Future<Integer> f = exec.submit(() -> 6 * 7);
            System.out.println("Result: " + f.get());
        }
    }
}

बिल्डर बनाम एक्जीक्यूटर

चुनाव आपके उद्देश्य के आधार पर करें:

  • बिल्डर / startVirtualThread एक बार चलने वाले थ्रेड या कस्टम नामकरण के लिए
  • newVirtualThreadPerTaskExecutor कार्यों के संग्रह भेजने और परिणाम एकत्र करने के लिए

दोनों कार्य की हर इकाई के लिए एक वर्चुअल थ्रेड बनाते हैं, और यही आपको चाहिए।

वर्चुअल एक्जीक्यूटर को कभी कैश न करें

किसी एक वर्चुअल-थ्रेड एक्जीक्यूटर का पुनः उपयोग ऐसे न करें, जैसे वह कर्मियों का निश्चित पूल हो। एक्जीक्यूटर का पुनः उपयोग करना ठीक है, लेकिन याद रखें कि हर कार्य एक बिल्कुल नया थ्रेड शुरू करता है।

मुख्य बात यह है कि थ्रेड की कोई पूलिंग नहीं होती, केवल कार्य भेजने की सुविधा होती है।

त्वरित जाँच

ऐसे बड़े समूह के कार्य चलाने का सबसे अच्छा तरीका चुनें, जिसमें हर कार्य अपना वर्चुअल थ्रेड इस्तेमाल करे।

पुनरावृत्ति

अब आप जानते हैं कि वर्चुअल थ्रेड कैसे बनाए जाते हैं:

  • Thread.ofVirtual().start(...) और .unstarted(...)
  • Thread.startVirtualThread(...) का एक-पंक्ति वाला तरीका
  • पुनः उपयोग योग्य ThreadFactory के लिए .factory()
  • संसाधनों के साथ try ब्लॉक में Executors.newVirtualThreadPerTaskExecutor()

अगला विषय: प्लेटफ़ॉर्म और वर्चुअल थ्रेड के बीच चुनाव।

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

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

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

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

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

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

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

“Virtual Threads बनाना” में मैं क्या सीखूँगा?

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

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

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

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

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

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

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

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

  1. Virtual Threads क्या हैं
  2. Virtual Threads बनाना
  3. Platform बनाम Virtual Threads
  4. समस्याएँ: Pinning और ThreadLocals
← Java Academy पर वापस जाएँ