1.Thread.sleep()

Anda dapat menyisipkan jeda ke dalam eksekusi program Java. Ini biasanya tidak diperlukan, karena pengguna ingin program mereka berjalan secepat mungkin. Tidak banyak orang yang senang jika Anda sengaja memperlambat kode Anda.

Tetapi sebagai seorang programmer, ada banyak situasi di mana jeda dalam kode Anda akan berguna. Misalnya, Anda sedang menulis permainan dan Anda ingin permainan itu melakukan sesuatu setiap dua detik sekali atau beberapa kali dalam satu detik.

Pada dasarnya, jeda bermanfaat, jadi mari kita lihat cara menambahkan jeda ke kode Anda. Ini sebenarnya sangat sederhana:

Thread.sleep(duration);

Di mana duration panjang jeda dalam milidetik ( 1/1000satu detik).

Pernyataan ini akan menjeda program Anda selama duration milidetik. Contoh:

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

Inilah cara ini dapat digunakan dalam praktik. Katakanlah kita sedang menulis program yang akan meluncurkan pesawat luar angkasa. Seperti inilah tampilan kodenya:

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

System.out.println("Let's go!");
Setiap detik, program akan menampilkan angka: 10, lalu 9, lalu 8, dll.




Saat hitungan mencapai 0, program akan menampilkan " Let's go!"

2. Menghitung jeda dengan benar

Panjang jeda mudah dihitung. Jika Anda membutuhkan program untuk melakukan sesuatu sekali dalam satu detik, maka jeda adalah 1000 ms. Jika 2 kali per detik, jeda selama 500ms (1000/2).

Jika Anda perlu melakukan sesuatu 15 kali per detik, jeda selama 66 mdtk (1000/15). Semuanya tampak agak mudah:

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

Namun ada nuansa yang sangat penting di sini. Meskipun banyak pernyataan dieksekusi dengan sangat cepat, mereka tidak instan.

Lihat ini. Katakanlah Anda memiliki tindakan yang membutuhkan waktu 100 md untuk diselesaikan. Anda ingin melakukan tindakan ini 5 kali per detik. Berapa lama Anda harus berhenti? Jelas bukan 200ms.

Agar tindakan dilakukan 5 kali per detik, kita membutuhkan waktu yang diperlukan untuk menjalankan tindakan ditambah durasi jeda sama dengan 200 ms. Jika kita melakukannya, maka itu akan berjalan tepat 5 kali per detik. Dalam kasus kami, tindakan membutuhkan 100 md, yang berarti masih tersisa 100 md untuk jeda.

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

Pengembang game sangat menyadari fakta bahwa waktu yang dibutuhkan untuk melakukan suatu tindakan jauh lebih tinggi dari nol. Begitu juga dengan orang yang bermain game.

Jika sebuah game berjalan pada 20 FPS, itu artinya hanya dapat menggambar 20 bingkai di layar dalam satu detik. 1000/20menghasilkan 50 ms. Ini adalah waktu yang dibutuhkan untuk menggambar bingkai saat bermain game.



3. Nanodetik

Komputer saat ini jauh lebih cepat daripada saat Java dibuat. Itu berarti jeda 1 milidetik mungkin tidak cukup terperinci.

Misalkan kita memiliki beberapa tindakan super singkat yang ingin kita lakukan 2000 kali per detik. Bagaimana kita berhenti selama setengah milidetik?

Untuk ini, ada satu varian lagi dari Thread.sleep()metode ini:

Thread.sleep(milliseconds, nanoseconds);

Metode ini menidurkan program untuk jumlah milidetik dan nanodetik yang ditentukan.

Nanodetik adalah sepersejuta milidetik. Itu berarti jeda satu setengah milidetik akan terlihat seperti ini:

Thread.sleep(1, 500_000);

Dan jika Anda ingin jeda 1/10satu milidetik, Anda perlu menulis ini:

Thread.sleep(0, 100_000);

Anda mungkin tidak menggunakan metode ini di program Anda saat ini. Tetapi lebih baik mengetahuinya dan tidak menggunakannya daripada membutuhkannya dan tidak mengetahuinya.



4. TimeUnitkelas

Omong-omong, Java memiliki kelas lain yang akan membuat hidup Anda lebih mudah jika Anda memutuskan untuk memperlambat aplikasi Anda. Kita berbicara tentang TimeUnitkelas dalam java.util.concurrentpaket.

Ingatlah bahwa karena kelas tidak ada dalam java.langpaket, maka Anda perlu menambahkan baris import java.util.concurrent.TimeUnit;, atau menulis java.util.concurrent.TimeUnitsetiap waktu dalam kode Anda.

Kelas ini melakukan hal yang sama seperti Thread.sleep(), tetapi lebih nyaman:

TimeUnit.HOURS.sleep(15)

Kode ini akan membuat program Anda tertidur selama 15 jam. Menit, detik, hari juga tersedia. Serta mikrodetik (1/1000.000) dan nanodetik (1/1000.000.000).

Kelas TimeUnit memiliki properti berikut:

  • nanodetik:NANOSECONDS
  • mikrodetik:MICROSECONDS
  • milidetik:MILLISECONDS
  • detikSECONDS
  • menit:MINUTES
  • jam:HOURS
  • hari:DAYS

Bekerja dengan properti ini sangat nyaman, karena tidak perlu berpikir untuk mengubah, katakanlah, jam menjadi milidetik. Kode seperti itu jauh lebih menyenangkan untuk ditulis dan dibaca.

Lebih lengkapnya bisa dibaca disini .