1.Thread.sleep()

Bir Java programının yürütülmesine duraklamalar ekleyebilirsiniz. Kullanıcılar programlarının olabildiğince çabuk çalışmasını istediklerinden bu genellikle gerekli değildir. Kodunuzu kasıtlı olarak yavaşlatırsanız pek çok insan mutlu olmaz.

Ancak bir programcı olarak, kodunuzda bir duraklamanın yararlı olacağı tonlarca durum olabilir. Örneğin, bir oyun yazdığınızı ve oyunun her iki saniyede bir veya saniyede birkaç kez bir şey yapmasını istediğinizi varsayalım.

Temel olarak, duraklamalar yararlıdır, bu yüzden kodunuza nasıl duraklama ekleyeceğinizi görelim. Aslında çok basit:

Thread.sleep(duration);

duration Milisaniye cinsinden duraklamanın uzunluğu nerede ( bir 1/1000saniyenin).

Bu ifade, programınızı milisaniyeler için duraklatır duration . Örnekler:

Thread.sleep(2000);
Programı 2 saniye duraklatır.
Thread.sleep(500);
Programı yarım saniye duraklatır.
Thread.sleep(60 * 60 * 1000);
Programı 1 saat duraklatır.

İşte pratikte nasıl kullanılabileceği. Diyelim ki bir uzay gemisini fırlatacak bir program yazıyoruz. Kod şöyle görünebilir:

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

System.out.println("Let's go!");
Her saniye, program bir sayı görüntüler: 10, sonra 9, sonra 8, vb.




Sayıya ulaştığında 0, program " Let's go!" görüntüler.

2. Duraklamayı doğru hesaplamak

Duraklamanın uzunluğunu hesaplamak kolaydır. Programın saniyede bir şey yapmasına ihtiyacınız varsa, duraklama 1000 ms'dir. Saniyede 2 kez ise, 500 ms (1000/2) duraklatın.

Saniyede 15 kez bir şey yapmanız gerekiyorsa, 66 ms (1000/15) duraklatın. Her şey oldukça basit görünüyor:

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

Ancak burada çok önemli bir nüans var. Pek çok ifade çok hızlı yürütülse de anlık değildir.

Şuna bak. Diyelim ki tamamlanması 100 ms süren bir eyleminiz var. Bu eylemi saniyede 5 kez gerçekleştirmek istiyorsunuz. Ne kadar süre ara vermelisin? Kesinlikle 200ms değil.

Eylemin saniyede 5 kez gerçekleştirilmesi için, eylemi gerçekleştirmek için gereken süre artı duraklama süresinin 200 ms'ye eşit olması gerekir. Bunu yaparsak, saniyede tam olarak 5 kez çalışacaktır. Bizim durumumuzda, eylem 100 ms gerektirir, bu da duraklama için hala 100 ms kaldığı anlamına gelir.

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

Oyun geliştiricileri , bir eylemi gerçekleştirmek için gereken sürenin sıfırdan çok daha uzun olduğunun gayet iyi farkındadır . Oyun oynayan insanlar da öyle.

Bir oyun 20 FPS'de çalışıyorsa bu, ekranda bir saniyede yalnızca 20 kare çizebileceği anlamına gelir. 1000/2050 ms verir. Bu, oyun oynarken bir çerçeve çizmek için gereken süredir .



3. Nanosaniye

Günümüz bilgisayarları, Java'nın oluşturulduğundan çok daha hızlıdır. Bu, 1 milisaniyelik bir duraklamanın yeterince ayrıntılı olmayabileceği anlamına gelir.

Saniyede 2000 kez gerçekleştirmek istediğimiz süper kısa bir eylemimiz olduğunu varsayalım. Yarım milisaniye nasıl dururuz?

Bunun için yöntemin bir çeşidi daha vardır Thread.sleep():

Thread.sleep(milliseconds, nanoseconds);

Bu yöntem, programı belirtilen milisaniye ve nanosaniye miktarı boyunca uyku moduna geçirir.

Nanosaniye, milisaniyenin milyonda biridir. Bu, bir buçuk milisaniyelik bir duraklamanın şöyle görüneceği anlamına gelir:

Thread.sleep(1, 500_000);

Ve bir milisaniyelik bir duraklama istiyorsanız 1/10, şunu yazmanız gerekir:

Thread.sleep(0, 100_000);

Şu anda programlarınızda bu yöntemi kullanmıyor olabilirsiniz. Ama onu bilmek ve kullanmamak, ona ihtiyaç duyup bilmemekten daha iyidir.



4. TimeUnitsınıf

Bu arada, uygulamanızı yavaşlatmaya karar verirseniz Java'nın hayatınızı kolaylaştıracak başka bir sınıfı daha var. TimeUnitPaketteki sınıftan bahsediyoruz java.util.concurrent.

Sınıf pakette olmadığı için java.langya satırı eklemeniz ya da her seferinde kodunuza import java.util.concurrent.TimeUnit;yazmanız gerektiğini unutmayın.java.util.concurrent.TimeUnit

Bu sınıf, ile aynı şeyi yapar Thread.sleep(), ancak daha kullanışlıdır:

TimeUnit.HOURS.sleep(15)

Bu kod, programınızı 15 saat uyku moduna alacaktır. Dakikalar, saniyeler, günler de mevcuttur. Mikrosaniye (1/1000.000) ve nanosaniye (1/1000.000.000) gibi.

Sınıf TimeUnit aşağıdaki özelliklere sahiptir:

  • nanosaniye:NANOSECONDS
  • mikrosaniye:MICROSECONDS
  • milisaniye:MILLISECONDS
  • saniyeSECONDS
  • dakika:MINUTES
  • saat:HOURS
  • günler:DAYS

Saatleri milisaniyeye çevirmeyi düşünmeye gerek olmadığı için bu özelliklerle çalışmak son derece uygundur. Böyle bir kodu yazmak ve okumak çok daha keyifli.

Daha fazla ayrıntı buradan okunabilir .