CodeGym/Blog Java/rawak/Kaedah Thread.sleep() dalam Java
John Squirrels
Tahap
San Francisco

Kaedah Thread.sleep() dalam Java

Diterbitkan dalam kumpulan
Dalam program Java, terdapat situasi apabila utas dijalankan terlalu cepat atau program perlu beralih ke utas lain. Untuk melakukan ini, anda perlu menangguhkan pelaksanaan utas semasa. Di Java, ini boleh dilakukan menggunakan kaedah java.lang.Thread.sleep() .

Kaedah thread.sleep().

Kelas Thread terdapat dalam pakej Java.lang dan mengandungi kaedah Thread.sleep() . Kaedah Java.lang.thread sleep() digunakan untuk menggantung benang semasa untuk tempoh masa tertentu dalam milisaat. Jika anda melihat Oracle docs , anda akan mendapati terdapat dua kaedah sleep() overloaded bagi kelas Thread .
static void sleep(long millis)
di mana millis ialah masa dalam milisaat. Kaedah ini menyebabkan benang yang sedang melaksanakan tidur (berhenti sementara pelaksanaan, "tidur") untuk milisaat, bergantung pada ketepatan pemasa sistem dan penjadual. Nilai hujah untuk milisaat tidak boleh negatif. Jika ya, IllegalArgumentException akan dibuang.
static void sleep(long millis, int nanos)
di mana mengisarnya masa dalam milisaat dan nano ialah masa dalam nanosaat. Varian kaedah ini digunakan untuk menggantung pelaksanaan utas semasa untuk masa yang tepat dalam milisaat dan nanosaat. Nilai nanosaat adalah sah antara 0 dan 999999. Mari buat program ringkas yang menggunakan kaedah Thread.sleep() untuk menjeda pelaksanaan utas utama selama 5 saat:
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 berlaku dalam program ini? Mula-mula ia bermula, kemudian ia tidur selama 5 milisaat (5 saat), kemudian mencetak ke konsol mesej tentang tempoh ia dibekukan, dan kemudian keluar. Outputnya ialah:
Urutan dijeda selama 5008 milisaat
Seperti yang anda lihat, program ini tidak berhenti seketika selama 5 saat, tetapi lebih lama sedikit. Juga jika anda menjalankan program pada komputer anda, anda akan perasan bahawa ia boleh menghentikan pelaksanaan utas untuk lebih lama daripada 5000 milisaat dan tidak diperlukan untuk 5008 milisaat. Intinya ialah semuanya bergantung pada sistem pengendalian dan pelaksanaan khusus penjadual benang. Secara lebih terperinci, masa sebenar benang menunggu sebelum bangun dan memulakan pelaksanaan bergantung pada pemasa sistem dan penjadual. Untuk sistem yang senyap, masa tidur sebenar adalah hampir dengan masa tidur yang ditentukan, tetapi untuk sistem yang dimuatkan, ia akan menjadi lebih lama sedikit. Kaedah ini sering digunakan dalam benang kanak-kanak apabila anda perlu melakukan beberapa tindakan sepanjang masa, tetapi tidak terlalu kerap. Berikut ialah contoh program yang akan mencetak mesej setiap saat 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");
       }
   }
}

Perkara penting Java Thread Sleep

Adalah penting untuk diingat bahawa kaedah Java Thread Sleep berfungsi sedemikian rupa sehingga:
  • Ia sentiasa menggantung pelaksanaan utas semasa.

  • Benang sebenar tidur sehingga ia terjaga, dan masa pelaksanaan bergantung pada pemasa sistem dan penjadual.

  • Benang tidur tidak menyekat benang semasa.

  • Sebarang utas lain boleh mengganggu utas tidur semasa, dalam hal ini InterruptedException dilemparkan.

  • Nilai hujah untuk milisaat tidak boleh negatif, jika tidak, IllegalArgumentException akan dilemparkan.

Untuk memberikan contoh membuang IllegalArgumentException , cuma ubah suai program di atas sedikit:
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");
       }
}
Berikut adalah outputnya:
Pengecualian dalam utas "utama" java.lang.IllegalArgumentException: nilai tamat masa adalah negatif di java.base/java.lang.Thread.sleep(Kaedah Asli) di SleepDemo.main(SleepDemo.java:7)
Di atas kita meletakkan benang utama untuk tidur. Sekarang mari cuba gunakan kaedah itu pada beberapa utas lain.
// 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 ialah:
0 1 2 3 4 5 6 7 8 9
Komen
  • Popular
  • Baru
  • Tua
Anda mesti log masuk untuk meninggalkan ulasan
Halaman ini tidak mempunyai sebarang ulasan lagi