CodeGym /Java Blogu /Rastgele /Java'da Thread.sleep() Yöntemi
John Squirrels
Seviye
San Francisco

Java'da Thread.sleep() Yöntemi

grupta yayınlandı
Java programlarında, bir iş parçacığının çok hızlı çalıştığı veya programın başka bir iş parçacığına geçmesi gerektiği durumlar vardır. Bunu yapmak için, mevcut iş parçacığının yürütülmesini askıya almanız gerekir. Java'da bu, java.lang.Thread.sleep() yöntemi kullanılarak yapılabilir .

Thread.sleep() yöntemi

Thread sınıfı , Java.lang paketinde bulunur ve Thread.sleep() yöntemini içerir. Java.lang.thread sleep() yöntemi, geçerli iş parçacığını milisaniye cinsinden belirli bir süre boyunca askıya almak için kullanılır. Oracle docs'a bakarsanız , Thread sınıfının iki aşırı yüklenmiş sleep() yöntemi olduğunu göreceksiniz .

static void sleep(long millis)
burada milis, milisaniye cinsinden süredir. Bu yöntem, sistem zamanlayıcılarının ve programlayıcıların kesinliğine bağlı olarak, o anda yürütülmekte olan iş parçacığının milisaniyelerce milisaniye boyunca uyku moduna geçmesine (yürütmeyi geçici olarak durdurması, "uykuya geçmesi") neden olur. Milisaniye için bağımsız değişken değeri negatif olamaz. Eğer öyleyse, IllegalArgumentException atılacaktır.

static void sleep(long millis, int nanos)
burada zamanı milisaniye cinsinden ve nanos, nanosaniye cinsinden zamandır. Bu yöntem varyantı, geçerli iş parçacığının yürütülmesini milisaniye ve nanosaniye cinsinden tam süre boyunca askıya almak için kullanılır. Nanosaniye değeri 0 ile 999999 arasında geçerlidir . Ana iş parçacığının yürütülmesini 5 saniye duraklatmak için Thread.sleep() yöntemini kullanan basit bir program oluşturalım :

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");
       }
}
Bu programda neler oluyor? Önce başlar, sonra 5 milisaniye (5 saniye) uykuda kalır, ardından konsola ne kadar süreyle donduğuna dair bir mesaj yazdırır ve sonra çıkar. Çıktı:
İş parçacığı 5008 milisaniye duraklatıldı
Gördüğünüz gibi program 5 saniye değil, biraz daha uzun süre durakladı. Ayrıca programı bilgisayarınızda çalıştırırsanız, iş parçacığının yürütülmesini 5000 milisaniyeden daha uzun süre durdurabileceğini ve 5008 milisaniye için gerekli olmadığını fark edeceksiniz. Mesele şu ki, hepsi işletim sistemine ve iş parçacığı zamanlayıcısının özel uygulamasına bağlıdır. Biraz daha ayrıntılı olarak, bir iş parçacığının uyanmadan ve yürütmeye başlamadan önce beklediği gerçek süre, sistem zamanlayıcılarına ve programlayıcılara bağlıdır. Sessiz bir sistem için gerçek uyku süresi, belirtilen uyku süresine yakındır, ancak yüklü bir sistem için biraz daha uzun olacaktır. Bu yöntem, her zaman biraz işlem yapmanız gerektiğinde, ancak çok sık olmamak kaydıyla, genellikle alt ileti dizilerinde kullanılır. İşte her saniye bir mesaj yazdıracak ve asla çıkmayacak bir program örneği:

public class SleepDemo1 {

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

Java Thread Sleep'in önemli noktaları

Java Thread Sleep yönteminin şu şekilde çalıştığını unutmamak önemlidir :
  • Her zaman mevcut iş parçacığının yürütülmesini askıya alır.

  • Gerçek iş parçacığı uyanana kadar uyur ve yürütme süresi, sistem zamanlayıcılarına ve programlayıcılara bağlıdır.

  • Uyuyan iş parçacığı, geçerli iş parçacığını engellemez.

  • Diğer herhangi bir iş parçacığı, geçerli uyuyan iş parçacığını kesebilir, bu durumda bir InterruptedException atılır.

  • Milisaniye için bağımsız değişken değeri negatif olamaz, aksi takdirde bir IllegalArgumentException oluşturulur.

Bir IllegalArgumentException atma örneği vermek için , yukarıdaki programı biraz değiştirmeniz yeterlidir:

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");
       }
}
İşte çıktı:
"Main" iş parçacığında istisna Java.lang.IllegalArgumentException: Java.base/java.lang.Thread.sleep(Native Method) adresinde SleepDemo.main(SleepDemo.java:7)'de zaman aşımı değeri negatif
Yukarıda ana iş parçacığını uyku moduna geçirdik. Şimdi yöntemi başka bir diziye uygulamayı deneyelim.

// 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();
       }
}
Çıktı:
0 1 2 3 4 5 6 7 8 9
Yorumlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION