CodeGym /Java Blog /Acak /Metode Thread.sleep() di Java
John Squirrels
Level 41
San Francisco

Metode Thread.sleep() di Java

Dipublikasikan di grup Acak
Dalam program Java, ada situasi ketika utas dijalankan terlalu cepat atau program perlu beralih ke utas lainnya. Untuk melakukan ini, Anda perlu menangguhkan eksekusi utas saat ini. Di Java, ini bisa dilakukan dengan menggunakan metode java.lang.Thread.sleep() .

Metode Thread.sleep()

Kelas Thread hadir dalam paket Java.lang dan berisi metode Thread.sleep() . Metode Java.lang.thread sleep() digunakan untuk menangguhkan utas saat ini selama jangka waktu tertentu dalam milidetik. Jika Anda melihat Oracle docs , Anda akan menemukan bahwa ada dua metode sleep() yang kelebihan beban dari kelas Thread .

static void sleep(long millis)
di mana milis adalah waktu dalam milidetik. Metode ini menyebabkan utas yang sedang dieksekusi untuk tidur (untuk sementara menghentikan eksekusi, "tidur") selama milidetik, tergantung pada ketepatan pengatur waktu dan penjadwal sistem. Nilai argumen untuk milidetik tidak boleh negatif. Jika demikian, IllegalArgumentException akan dilempar.

static void sleep(long millis, int nanos)
di mana pabrik itu waktu dalam milidetik dan nanos adalah waktu dalam nanodetik. Variasi metode ini digunakan untuk menangguhkan eksekusi utas saat ini untuk waktu yang tepat dalam milidetik dan nanodetik. Nilai nanodetik valid antara 0 dan 999999. Mari buat program sederhana yang menggunakan metode Thread.sleep() untuk menjeda eksekusi thread utama selama 5 detik:

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");
       }
}
Apa yang terjadi dalam program ini? Pertama dimulai, lalu tidur selama 5 milidetik (5 detik), lalu mencetak ke konsol pesan tentang berapa lama dibekukan, lalu keluar. Outputnya adalah:
Utas dijeda selama 5008 milidetik
Seperti yang Anda lihat, program tidak berhenti selama 5 detik, tetapi sedikit lebih lama. Juga jika Anda menjalankan program di komputer Anda, Anda akan melihat bahwa itu dapat menghentikan eksekusi utas selama lebih dari 5000 milidetik dan tidak diperlukan selama 5008 milidetik. Intinya adalah semuanya tergantung pada sistem operasi dan implementasi khusus dari penjadwal utas. Sedikit lebih detail, waktu sebenarnya sebuah utas menunggu sebelum bangun dan memulai eksekusi bergantung pada pengatur waktu dan penjadwal sistem. Untuk sistem yang senyap, waktu tidur sebenarnya mendekati waktu tidur yang ditentukan, tetapi untuk sistem yang dimuat akan sedikit lebih lama. Metode ini sering digunakan di utas anak saat Anda perlu melakukan beberapa tindakan sepanjang waktu, tetapi tidak terlalu sering. Berikut adalah contoh program yang akan mencetak pesan setiap detik dan tidak pernah keluar:

public class SleepDemo1 {

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

Poin penting dari Java Thread Sleep

Penting untuk diingat bahwa metode Java Thread Sleep bekerja sedemikian rupa sehingga:
  • Itu selalu menangguhkan eksekusi utas saat ini.

  • Utas yang sebenarnya tidur hingga bangun, dan waktu eksekusi bergantung pada pengatur waktu dan penjadwal sistem.

  • Utas tidur tidak memblokir utas saat ini.

  • Utas lainnya dapat mengganggu utas yang sedang tidur, dalam hal ini InterruptedException dilemparkan.

  • Nilai argumen untuk milidetik tidak boleh negatif, jika tidak, IllegalArgumentException akan dilontarkan.

Untuk memberikan contoh melempar IllegalArgumentException , cukup modifikasi sedikit program di atas:

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");
       }
}
Inilah hasilnya:
Pengecualian di utas "utama" java.lang.IllegalArgumentException: nilai batas waktu negatif di java.base/java.lang.Thread.sleep(Metode Asli) di SleepDemo.main(SleepDemo.java:7)
Di atas kami menidurkan utas utama. Sekarang mari kita coba terapkan metode ini ke beberapa utas lainnya.

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