जावा प्रोग्राम्समध्ये, अशी परिस्थिती असते जेव्हा एखादा थ्रेड खूप वेगाने कार्यान्वित होतो किंवा प्रोग्रामला दुसर्या थ्रेडवर स्विच करणे आवश्यक असते. हे करण्यासाठी, आपल्याला वर्तमान थ्रेडची अंमलबजावणी निलंबित करण्याची आवश्यकता आहे. Java मध्ये, हे java.lang.Thread.sleep() पद्धत वापरून करता येते .
Thread.sleep() पद्धत
थ्रेड क्लास Java.lang पॅकेजमध्ये आहे आणि त्यात Thread.sleep () पद्धत आहे. Java.lang.thread sleep() पद्धत वर्तमान थ्रेडला ठराविक वेळेसाठी मिलीसेकंदमध्ये निलंबित करण्यासाठी वापरली जाते. तुम्ही ओरॅकल डॉक्स पाहिल्यास , तुम्हाला आढळेल की थ्रेड क्लासच्या दोन ओव्हरलोडेड स्लीप() पद्धती आहेत .
static void sleep(long millis)
जेथे मिलिस ही मिलिसेकंदात वेळ आहे. सिस्टम टाइमर आणि शेड्युलरच्या अचूकतेवर अवलंबून, या पद्धतीमुळे मिलिसेकंदांच्या मिलिसेकंदांसाठी सध्या कार्यान्वित होणारा थ्रेड स्लीप होतो (तात्पुरते अंमलबजावणी थांबवा, "स्लीपिंग"). मिलीसेकंदांसाठी वितर्क मूल्य ऋण असू शकत नाही. तसे असल्यास, IllegalArgumentException टाकला जाईल.
static void sleep(long millis, int nanos)
जेथे मिल्स इट टाईम मिलिसेकंदमध्ये आणि नॅनोस ही वेळ नॅनोसेकंदमध्ये असते. या पद्धतीचा वापर मिलिसेकंद आणि नॅनोसेकंदमध्ये अचूक वेळेसाठी वर्तमान थ्रेडची अंमलबजावणी निलंबित करण्यासाठी केला जातो. नॅनोसेकंद मूल्य 0 आणि 999999 दरम्यान वैध आहे . मुख्य थ्रेडच्या अंमलबजावणीला 5 सेकंदांसाठी विराम देण्यासाठी Thread.sleep() पद्धत वापरणारा एक साधा प्रोग्राम तयार करूया :
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");
}
}
}
जावा थ्रेड स्लीपचे महत्त्वाचे मुद्दे
हे लक्षात ठेवणे महत्त्वाचे आहे की जावा थ्रेड स्लीप पद्धत अशा प्रकारे कार्य करते की:-
हे नेहमी वर्तमान थ्रेडची अंमलबजावणी निलंबित करते.
-
वास्तविक थ्रेड जागे होईपर्यंत झोपतो आणि अंमलबजावणीची वेळ सिस्टम टाइमर आणि शेड्यूलरवर अवलंबून असते.
-
स्लीपिंग थ्रेड चालू धागा अवरोधित करत नाही.
-
इतर कोणताही थ्रेड सध्याच्या स्लीपिंग थ्रेडमध्ये व्यत्यय आणू शकतो, अशा परिस्थितीत InterruptedException टाकला जातो.
-
मिलिसेकंदांसाठी वितर्क मूल्य ऋण असू शकत नाही, अन्यथा एक बेकायदेशीर आर्ग्युमेंट अपवाद टाकला जाईल.
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 मधील अपवाद: SleepDemo.main(SleepDemo.java:7) येथे java.base/java.lang.Thread.sleep(नेटिव्ह मेथड) येथे कालबाह्य मूल्य ऋण आहे.
वर आम्ही मुख्य धागा झोपण्यासाठी ठेवतो. आता ही पद्धत इतर थ्रेडवर लागू करण्याचा प्रयत्न करूया.
// 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
GO TO FULL VERSION