1.Thread.sleep()

Anda boleh memasukkan jeda ke dalam pelaksanaan program Java. Ini biasanya tidak diperlukan, kerana pengguna mahu program mereka berjalan secepat mungkin. Tidak ramai orang akan gembira jika anda sengaja memperlahankan kod anda.

Tetapi sebagai pengaturcara, terdapat banyak situasi di mana jeda dalam kod anda akan berguna. Sebagai contoh, katakan anda sedang menulis permainan dan anda mahu ia melakukan sesuatu sekali setiap dua saat atau beberapa kali sesaat.

Pada asasnya, jeda berguna, jadi mari lihat cara menambah jeda pada kod anda. Ia sebenarnya sangat mudah:

Thread.sleep(duration);

Di manakah duration panjang jeda dalam milisaat ( 1/1000satu saat).

Pernyataan ini akan menjeda program anda selama duration milisaat. Contoh:

Thread.sleep(2000);
Menjeda program selama 2 saat.
Thread.sleep(500);
Menjeda program selama setengah saat.
Thread.sleep(60 * 60 * 1000);
Menjeda program selama 1 jam.

Begini cara ia boleh digunakan dalam amalan. Katakan kita sedang menulis program yang akan melancarkan kapal angkasa. Beginilah rupa kod tersebut:

for (int i = 10; i > 0; i--)
{
   System.out.println(i);
   Thread.sleep(1000);
}

System.out.println("Let's go!");
Setiap saat, program akan memaparkan nombor: 10, kemudian 9, kemudian 8, dsb.




Apabila kiraan mencapai 0, program akan memaparkan " Let's go!"

2. Mengira jeda dengan betul

Panjang jeda mudah dikira. Jika anda memerlukan program untuk melakukan sesuatu sekali sesaat, maka jeda ialah 1000 ms. Jika 2 kali sesaat, kemudian jeda selama 500ms (1000/2).

Jika anda perlu melakukan sesuatu 15 kali sesaat, jeda selama 66 ms (1000/15). Semuanya kelihatan agak mudah:

The duration of one iteration of the loop = 1000 / number of times per second

Tetapi ada nuansa yang sangat penting di sini. Walaupun banyak kenyataan dilaksanakan dengan sangat cepat, ia tidak serta-merta.

Lihat ini. Katakan anda mempunyai tindakan yang mengambil masa 100ms untuk diselesaikan. Anda mahu melakukan tindakan ini 5 kali sesaat. Berapa lama anda perlu berhenti seketika? Sudah tentu bukan 200ms.

Untuk tindakan dilakukan 5 kali sesaat, kita memerlukan masa yang diperlukan untuk melaksanakan tindakan ditambah tempoh jeda bersamaan dengan 200 ms. Jika kita berbuat demikian, maka ia akan berjalan dengan tepat 5 kali sesaat. Dalam kes kami, tindakan itu memerlukan 100 ms, yang bermaksud masih ada 100 ms lagi untuk jeda.

pause duration = duration of one iteration of the loop - time required to execute the action

Pembangun permainan amat menyedari hakikat bahawa masa yang diperlukan untuk melaksanakan tindakan adalah lebih tinggi daripada sifar. Dan begitu juga orang yang bermain permainan.

Jika permainan berjalan pada 20 FPS, ini bermakna ia boleh melukis hanya 20 bingkai pada skrin dalam satu saat. 1000/20menghasilkan 50 ms. Ini adalah masa yang diperlukan untuk melukis bingkai semasa bermain permainan.



3. Nanosaat

Komputer hari ini adalah lebih pantas berbanding semasa Java dicipta. Ini bermakna jeda 1 milisaat mungkin tidak cukup berbutir.

Katakan kita mempunyai beberapa tindakan ringkas yang ingin kita lakukan 2000 kali sesaat. Bagaimanakah kita berhenti seketika selama setengah milisaat?

Untuk ini, terdapat satu lagi varian kaedah Thread.sleep():

Thread.sleep(milliseconds, nanoseconds);

Kaedah ini meletakkan program tidur untuk jumlah milisaat dan nanosaat yang ditentukan.

Nanosaat ialah 1 juta milisaat. Ini bermakna jeda satu setengah milisaat akan kelihatan seperti ini:

Thread.sleep(1, 500_000);

Dan jika anda mahukan jeda 1/10milisaat, anda perlu menulis ini:

Thread.sleep(0, 100_000);

Anda mungkin tidak menggunakan kaedah ini dalam program anda sekarang. Tetapi lebih baik mengetahui tentangnya dan tidak menggunakannya daripada memerlukannya dan tidak mengetahuinya.



4. TimeUnitkelas

Ngomong-ngomong, Java mempunyai kelas lain yang akan menjadikan hidup anda lebih mudah jika anda memutuskan untuk memperlahankan aplikasi anda. Kita bercakap tentang TimeUnitkelas dalam java.util.concurrentpakej.

Ingat bahawa memandangkan kelas tiada dalam java.langpakej, maka anda sama ada perlu menambah line import java.util.concurrent.TimeUnit;, atau menulis java.util.concurrent.TimeUnitsetiap kali dalam kod anda.

Kelas ini melakukan perkara yang sama seperti Thread.sleep(), tetapi ia lebih mudah:

TimeUnit.HOURS.sleep(15)

Kod ini akan meletakkan program anda tidur selama 15 jam. Minit, saat, hari juga ada. Serta mikrosaat (1/1000,000) dan nanosaat (1/1000,000,000).

Kelas TimeUnit mempunyai sifat berikut:

  • nanosaat:NANOSECONDS
  • mikrosaat:MICROSECONDS
  • milisaat:MILLISECONDS
  • detikSECONDS
  • minit:MINUTES
  • Jam:HOURS
  • hari:DAYS

Bekerja dengan sifat ini sangat mudah, kerana tidak perlu memikirkan tentang menukar, katakan, jam ke milisaat. Kod sedemikian adalah lebih menyenangkan untuk ditulis dan dibaca.

Butiran lanjut boleh baca di sini .