CodeGym /جاوا بلاگ /Random-UR /جاوا میں Thread.sleep() طریقہ
John Squirrels
سطح
San Francisco

جاوا میں Thread.sleep() طریقہ

گروپ میں شائع ہوا۔
جاوا پروگراموں میں، ایسے حالات ہوتے ہیں جب ایک تھریڈ بہت تیزی سے کام کر رہا ہوتا ہے یا پروگرام کو دوسرے تھریڈ پر جانے کی ضرورت ہوتی ہے۔ ایسا کرنے کے لیے، آپ کو موجودہ تھریڈ پر عمل درآمد کو معطل کرنے کی ضرورت ہے۔ جاوا میں، یہ java.lang.Thread.sleep() طریقہ استعمال کرتے ہوئے کیا جا سکتا ہے۔

Thread.sleep() طریقہ

تھریڈ کلاس Java.lang پیکیج میں موجود ہے اور Thread.sleep() طریقہ پر مشتمل ہے۔ Java.lang.thread sleep() طریقہ موجودہ تھریڈ کو ملی سیکنڈز میں ایک مخصوص وقت کے لیے معطل کرنے کے لیے استعمال کیا جاتا ہے۔ اگر آپ Oracle docs کو دیکھیں تو آپ کو معلوم ہوگا کہ Thread کلاس کے دو اوور لوڈڈ sleep() طریقے ہیں۔
static void sleep(long millis)
جہاں ملیس کا وقت ملی سیکنڈ میں ہوتا ہے۔ یہ طریقہ سسٹم کے ٹائمرز اور شیڈیولرز کی درستگی پر منحصر ہے، ملی سیکنڈز کی ملی سیکنڈز کے لیے فی الحال ایکزیکیوٹ کرنے والے تھریڈ کو سلیپ کرنے کا سبب بنتا ہے (عارضی طور پر عملدرآمد روکنا، "سونے")۔ ملی سیکنڈز کے لیے دلیل کی قدر منفی نہیں ہو سکتی۔ اگر ایسا ہے تو، IllegalArgumentException پھینک دیا جائے گا۔
static void sleep(long millis, int nanos)
جہاں ملز کا وقت ملی سیکنڈ میں ہوتا ہے اور نانو کا وقت نینو سیکنڈ میں ہوتا ہے۔ اس طریقہ کار کا استعمال موجودہ دھاگے کے عمل کو ملی سیکنڈز اور نینو سیکنڈز میں درست وقت کے لیے معطل کرنے کے لیے کیا جاتا ہے۔ نینو سیکنڈ ویلیو 0 اور 999999 کے درمیان درست ہے۔ آئیے ایک سادہ پروگرام بناتے ہیں جو Thread.sleep() طریقہ استعمال کرتا ہے تاکہ مین تھریڈ کے عمل کو 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");
       }
   }
}

جاوا تھریڈ سلیپ کے اہم نکات

یہ یاد رکھنا ضروری ہے کہ جاوا تھریڈ سلیپ کا طریقہ اس طرح کام کرتا ہے کہ:
  • یہ ہمیشہ موجودہ تھریڈ کے عمل کو معطل کرتا ہے۔

  • اصل دھاگہ اس وقت تک سوتا ہے جب تک کہ وہ بیدار نہ ہو جائے، اور عمل درآمد کا وقت سسٹم کے ٹائمرز اور شیڈولرز پر منحصر ہوتا ہے۔

  • سلیپنگ تھریڈ موجودہ تھریڈ کو بلاک نہیں کرتا۔

  • کوئی بھی دوسرا تھریڈ موجودہ سلیپنگ تھریڈ میں خلل ڈال سکتا ہے، ایسی صورت میں ایک InterruptedException پھینک دیا جاتا ہے۔

  • ملی سیکنڈز کے لیے دلیل کی قدر منفی نہیں ہو سکتی، بصورت دیگر ایک 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");
       }
}
یہاں آؤٹ پٹ ہے:
تھریڈ "main" 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
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION