CodeGym/Java Blog/अनियमित/जावा में थ्रेड.स्लीप () विधि
John Squirrels
स्तर 41
San Francisco

जावा में थ्रेड.स्लीप () विधि

अनियमित ग्रुप में प्रकाशित
सदस्य
जावा प्रोग्राम में, ऐसी स्थितियाँ होती हैं जब एक थ्रेड बहुत तेज़ी से निष्पादित होता है या प्रोग्राम को दूसरे थ्रेड पर स्विच करने की आवश्यकता होती है। ऐसा करने के लिए, आपको वर्तमान थ्रेड के निष्पादन को निलंबित करने की आवश्यकता है। जावा में, यह java.lang.Thread.sleep() विधि का उपयोग करके किया जा सकता है।

थ्रेड.स्लीप () विधि

थ्रेड क्लास Java.lang पैकेज में मौजूद है और इसमें थ्रेड.स्लीप () विधि शामिल है। Java.lang.thread स्लीप () विधि का उपयोग मिलीसेकंड में निर्दिष्ट समय के लिए वर्तमान थ्रेड को निलंबित करने के लिए किया जाता है। यदि आप ओरेकल डॉक्स को देखते हैं , तो आप पाएंगे कि थ्रेड क्लास के दो अतिभारित स्लीप () तरीके हैं।
static void sleep(long millis)
जहां मिलिस मिलीसेकंड में समय है। यह विधि सिस्टम टाइमर और शेड्यूलर की शुद्धता के आधार पर, मिलीसेकंड के मिलीसेकंड के लिए वर्तमान में निष्पादित थ्रेड को सोने (अस्थायी रूप से निष्पादन, "नींद") को रोक देती है। मिलीसेकंड के लिए तर्क मान ऋणात्मक नहीं हो सकता। यदि ऐसा है, तो IllegalArgumentException को फेंक दिया जाएगा।
static void sleep(long millis, int nanos)
जहाँ यह मिलिसेकंड में समय को मिलाता है और नैनो सेकंड में समय है। मिलीसेकंड और नैनोसेकंड में सटीक समय के लिए वर्तमान थ्रेड के निष्पादन को निलंबित करने के लिए इस प्रकार की विधि का उपयोग किया जाता है। नैनोसेकंड मान 0 और 999999 के बीच मान्य है। चलिए एक सरल प्रोग्राम बनाते हैं जो 5 सेकंड के लिए मुख्य थ्रेड के निष्पादन को रोकने के लिए थ्रेड.स्लीप () विधि का उपयोग करता है:
public class SleepDemo {

       public static void main(String[] args) throws InterruptedException {
           //the current time in milliseconds
           long start = System.currentTimeMillis();
           // stop the main thread of the program for 5000 milliseconds (5 seconds)
           Thread.sleep(5000);
           System.out.println("The thread is paused for " + (System.currentTimeMillis() - start) + " milliseconds");
       }
}
इस कार्यक्रम में क्या हो रहा है? पहले यह शुरू होता है, फिर यह 5 मिलीसेकंड (5 सेकंड) के लिए सोता है, फिर कंसोल पर एक संदेश प्रिंट करता है कि यह कितनी देर तक जमे हुए था, और फिर बाहर निकल जाता है। आउटपुट है:
थ्रेड 5008 मिलीसेकंड के लिए रुका हुआ है
जैसा कि आप देख सकते हैं, कार्यक्रम 5 सेकंड के लिए नहीं रुका, लेकिन थोड़ी देर के लिए। इसके अलावा, यदि आप अपने कंप्यूटर पर प्रोग्राम चलाते हैं, तो आप देखेंगे कि यह थ्रेड के निष्पादन को 5000 मिलीसेकंड से अधिक समय तक रोक सकता है और 5008 मिलीसेकंड के लिए आवश्यक नहीं है। मुद्दा यह है कि यह सब ऑपरेटिंग सिस्टम और थ्रेड शेड्यूलर के विशिष्ट कार्यान्वयन पर निर्भर करता है। थोड़े और विस्तार से, वास्तविक समय एक धागा जागने से पहले इंतजार करता है और निष्पादन शुरू करना सिस्टम टाइमर और शेड्यूलर पर निर्भर करता है। एक शांत प्रणाली के लिए, वास्तविक नींद का समय निर्दिष्ट नींद के समय के करीब होता है, लेकिन लोडेड सिस्टम के लिए यह थोड़ा लंबा होगा। इस विधि का उपयोग अक्सर बाल धागे में किया जाता है जब आपको हर समय कुछ क्रिया करने की आवश्यकता होती है, लेकिन अक्सर नहीं। यहां एक ऐसे प्रोग्राम का उदाहरण दिया गया है जो हर सेकंड एक संदेश प्रिंट करेगा और कभी बाहर नहीं निकलेगा:
public class SleepDemo1 {

   public static void main(String[] args) throws InterruptedException {
       while (true)
       {
           Thread.sleep(1000);
           System.out.println("One more second");
       }
   }
}

जावा थ्रेड स्लीप के महत्वपूर्ण बिंदु

यह याद रखना महत्वपूर्ण है कि जावा थ्रेड स्लीप विधि इस तरह से काम करती है कि:
  • यह हमेशा वर्तमान थ्रेड के निष्पादन को निलंबित करता है।

  • वास्तविक धागा तब तक सोता है जब तक वह जाग नहीं जाता है, और निष्पादन का समय सिस्टम टाइमर और शेड्यूलर पर निर्भर करता है।

  • स्लीपिंग थ्रेड वर्तमान थ्रेड को ब्लॉक नहीं करता है।

  • कोई अन्य थ्रेड वर्तमान स्लीपिंग थ्रेड को बाधित कर सकता है, जिस स्थिति में एक इंटरप्टेड एक्सेप्शन फेंका जाता है।

  • मिलीसेकंड के लिए तर्क मान ऋणात्मक नहीं हो सकता, अन्यथा एक IllegalArgumentException को फेंक दिया जाएगा।

IllegalArgumentException को फेंकने का एक उदाहरण देने के लिए , उपरोक्त प्रोग्राम को थोड़ा सा संशोधित करें:
public class SleepDemo1 {

       public static void main(String[] args) throws InterruptedException {
           //the current time in milliseconds
           long start = System.currentTimeMillis();
           // stop the main thread of the program for 5000 milliseconds (5 seconds)
           Thread.sleep(-5000);
           System.out.println("The thread is paused for " + (System.currentTimeMillis() - start) + " ms");
       }
}
यहाँ आउटपुट है:
धागे में अपवाद "मुख्य" java.lang.IllegalArgumentException: टाइमआउट मान java.base/java.lang.Thread.sleep(Native Method) पर SleepDemo.main(SleepDemo.java:7) पर ऋणात्मक है।
ऊपर हम सोने के लिए मुख्य धागा डालते हैं। आइए अब इस विधि को किसी अन्य थ्रेड पर लागू करने का प्रयास करें।
// Java Program to sleep the custom thread
public class SleepDemo2 extends Thread{

       public void run()
       {
           // thread 0
           try {
               for (int i = 0; i < 10; i++) {

                   // sleeps the main thread for about 2 seconds
                   Thread.sleep(2000);
                   System.out.println(i);
               }
           }
           catch (Exception e) {

               // catching the exception
               System.out.println(e);
           }
       }
       public static void main(String[] args)
       {
           SleepDemo2 sleepDemo2 = new SleepDemo2();
           sleepDemo2.start();
       }
}
आउटपुट है:
0 1 2 3 4 5 6 7 8 9
टिप्पणियां
  • लोकप्रिय
  • नया
  • पुराना
टिप्पणी लिखने के लिए आपको साइन इन करना होगा
इस पेज पर अभी तक कोई टिप्पणियां नहीं हैं