1.Thread.sleep()

Sampeyan bisa nglebokake jeda menyang eksekusi program Java. Iki biasane ora perlu, amarga pangguna pengin program bisa mlaku kanthi cepet. Ora akeh wong sing bakal seneng yen sampeyan sengaja nyuda kode sampeyan.

Nanging minangka programmer, bisa uga ana pirang-pirang kahanan nalika ngaso ing kode sampeyan bakal migunani. Contone, umpamane sampeyan nulis game lan sampeyan pengin nindakake apa wae saben rong detik utawa kaping pindho saben detik.

Sejatine, ngaso migunani, mula ayo ndeleng carane nambah jeda ing kode sampeyan. Iku bener banget prasaja:

Thread.sleep(duration);

Ngendi duration dawa ngaso ing milliseconds ( 1/1000sadetik).

Pernyataan iki bakal ngaso program sampeyan nganti duration milidetik. Tuladha:

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

Mangkene carane bisa digunakake ing praktik. Ayo kita nulis program sing bakal ngluncurake pesawat ruang angkasa. Iki carane kode bisa katon kaya:

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

System.out.println("Let's go!");
Saben detik, program bakal nampilake nomer: 10, banjur 9, banjur 8, etc.




Nalika count tekan 0, program bakal nampilake " Let's go!"

2. Ngitung jeda kanthi bener

Dawane ngaso iku gampang kanggo ngetung. Yen sampeyan perlu program kanggo nindakake soko sapisan detik, banjur ngaso punika 1000 ms. Yen 2 kaping per detik, banjur ngaso kanggo 500ms (1000/2).

Yen sampeyan kudu nindakake 15 kaping per detik, ngaso kanggo 66 ms (1000/15). Iku kabeh katon cukup prasaja:

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

Nanging ana nuansa sing penting banget ing kene. Sanadyan akeh statement dieksekusi kanthi cepet, nanging ora langsung.

Delengen iki. Contone, sampeyan duwe tumindak sing mbutuhake 100ms kanggo ngrampungake. Sampeyan pengin nindakake tumindak iki 5 kaping saben detik. Suwene sampeyan kudu ngaso? Mesthi ora 200ms.

Kanggo tumindak 5 kaping per detik, kita butuh wektu sing dibutuhake kanggo nglakokake tumindak ditambah wektu ngaso padha karo 200 ms. Yen kita nindakake iku, banjur bakal mbukak sabenere 5 kaping per detik. Ing kasus kita, tumindak kasebut mbutuhake 100 ms, tegese isih ana 100 ms kanggo ngaso.

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

Pangembang game ngerti manawa wektu sing dibutuhake kanggo nindakake tumindak luwih dhuwur tinimbang nol. Lan uga wong sing main game.

Yen game mlaku ing 20 FPS, tegese mung bisa nggambar 20 pigura ing layar sajrone sedetik. 1000/20ngasilaken 50 ms. Iki wektu sing dibutuhake kanggo nggambar pigura nalika main game.



3. Nanodetik

Komputer saiki luwih cepet tinimbang nalika Jawa digawe. Tegese jeda 1 milidetik bisa uga ora cukup granular.

Upaminipun kita duwe sawetara tumindak super singkat sing arep kita nindakake 2000 kaping per detik. Kepiye carane ngaso setengah milidetik?

Kanggo iki, ana siji varian liyane saka Thread.sleep()cara:

Thread.sleep(milliseconds, nanoseconds);

Cara iki nggawe program turu kanggo jumlah milidetik lan nanodetik sing ditemtokake.

Nanodetik yaiku 1 yuta milidetik. Tegese ngaso siji lan setengah milidetik bakal katon kaya iki:

Thread.sleep(1, 500_000);

Lan yen sampeyan pengin ngaso saka 1/10milidetik, sampeyan kudu nulis iki:

Thread.sleep(0, 100_000);

Sampeyan bisa uga ora nggunakake metode iki ing program sampeyan saiki. Nanging luwih becik ngerti lan ora nggunakake tinimbang butuh lan ora ngerti.



4. TimeUnitkelas

Miturut cara, Jawa wis kelas liyane sing bakal nggawe urip luwih gampang yen sampeyan arep kanggo alon mudhun aplikasi. Kita ngomong babagan TimeUnitkelas ing java.util.concurrentpaket kasebut.

Elinga yen wiwit kelas ora ana ing java.langpaket, sampeyan kudu nambah baris import java.util.concurrent.TimeUnit;, utawa nulis java.util.concurrent.TimeUnitsaben wektu ing kode.

Kelas iki nindakake perkara sing padha karo Thread.sleep(), nanging luwih trep:

TimeUnit.HOURS.sleep(15)

Kode iki bakal nggawe program turu nganti 15 jam. Menit, detik, dina uga kasedhiya. Uga mikrodetik (1/1000.000) lan nanodetik (1/1000.000.000).

Kelas kasebut TimeUnit nduweni sifat ing ngisor iki:

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

Nggarap properti kasebut pancen trep banget, amarga ora perlu mikir babagan ngowahi, ucapake, jam dadi milidetik. Kode kuwi luwih nyenengake kanggo nulis lan maca.

Rincian liyane bisa diwaca kene .