1.Thread.sleep()

U kunt pauzes invoegen in de uitvoering van een Java-programma. Dit is meestal niet nodig, omdat gebruikers willen dat hun programma's zo snel mogelijk worden uitgevoerd. Niet veel mensen zouden blij zijn als u uw code opzettelijk vertraagde.

Maar als programmeur kunnen er tal van situaties zijn waarin een pauze in uw code nuttig zal zijn. Stel dat u een spel aan het schrijven bent en u wilt dat het elke twee seconden of meerdere keren per seconde iets doet.

In principe zijn pauzes nuttig, dus laten we eens kijken hoe we een pauze aan uw code kunnen toevoegen. Het is eigenlijk heel simpel:

Thread.sleep(duration);

Waar duration is de lengte van de pauze in milliseconden ( 1/1000van een seconde).

Deze instructie pauzeert uw programma voor duration milliseconden. Voorbeelden:

Thread.sleep(2000);
Pauzeert het programma gedurende 2 seconden.
Thread.sleep(500);
Pauzeert het programma gedurende een halve seconde.
Thread.sleep(60 * 60 * 1000);
Pauzeert het programma gedurende 1 uur.

Hier leest u hoe het in de praktijk kan worden gebruikt. Laten we zeggen dat we een programma schrijven dat een ruimteschip zal lanceren. Dit is hoe de code eruit zou kunnen zien:

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

System.out.println("Let's go!");
Elke seconde zal het programma een nummer weergeven: 10, dan 9, dan 8, enz.




Wanneer de teller bereikt , zal het programma " " 0weergevenLet's go!

2. Een pauze correct berekenen

De lengte van de pauze is eenvoudig te berekenen. Als je het programma één keer per seconde iets wilt laten doen, dan is de pauze 1000 ms. Indien 2 keer per seconde, pauzeer dan 500ms (1000/2).

Als je iets 15 keer per seconde moet doen, pauzeer dan 66 ms (1000/15). Het lijkt allemaal vrij eenvoudig:

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

Maar er is hier een heel belangrijke nuance. Hoewel veel instructies zeer snel worden uitgevoerd, zijn ze niet onmiddellijk.

Kijk hiernaar. Stel dat je een actie hebt die 100 ms duurt om te voltooien. U wilt deze actie 5 keer per seconde uitvoeren. Hoe lang moet je pauzeren? Zeker geen 200ms.

Om de actie 5 keer per seconde uit te voeren, hebben we de tijd nodig die nodig is om de actie uit te voeren plus de pauzeduur gelijk aan 200 ms. Als we dat doen, dan loopt hij precies 5 keer per seconde. In ons geval heeft de actie 100 ms nodig, wat betekent dat er nog 100 ms over is voor de pauze.

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

Game-ontwikkelaars zijn zich terdege bewust van het feit dat de tijd die nodig is om een ​​actie uit te voeren veel hoger is dan nul. En dat geldt ook voor de mensen die games spelen.

Als een game op 20 FPS draait, betekent dit dat er in één seconde slechts 20 frames op het scherm kunnen worden weergegeven. 1000/20levert 50 ms op. Dit is de tijd die nodig is om een ​​frame te tekenen tijdens het spelen van het spel.



3. Nanoseconden

Computers zijn tegenwoordig veel sneller dan toen Java werd gemaakt. Dat betekent dat een pauze van 1 milliseconde mogelijk niet voldoende gedetailleerd is.

Stel dat we een superkorte actie hebben die we 2000 keer per seconde willen uitvoeren. Hoe pauzeren we een halve milliseconde?

Hiervoor is er nog een variant van de Thread.sleep()methode:

Thread.sleep(milliseconds, nanoseconds);

Deze methode zet het programma in de slaapstand voor het opgegeven aantal milliseconden en nanoseconden.

Nanoseconden zijn 1 miljoenste van een milliseconde. Dat betekent dat een pauze van anderhalve milliseconde er als volgt uitziet:

Thread.sleep(1, 500_000);

En als je een pauze van een milliseconde wilt 1/10, moet je dit schrijven:

Thread.sleep(0, 100_000);

Mogelijk gebruikt u deze methode momenteel niet in uw programma's. Maar het is beter om ervan te weten en het niet te gebruiken dan om het nodig te hebben en er niet van af te weten.



4. TimeUnitklasse

Trouwens, Java heeft nog een klasse die je leven gemakkelijker zal maken als je besluit je applicatie te vertragen. We hebben het over de TimeUnitklas in het java.util.concurrentpakket.

Onthoud dat aangezien de klasse niet in het java.langpakket zit, u ofwel de regel moet toevoegen , ofwel elke keer in uw code moet import java.util.concurrent.TimeUnit;schrijven .java.util.concurrent.TimeUnit

Deze klasse doet hetzelfde als Thread.sleep(), maar is handiger:

TimeUnit.HOURS.sleep(15)

Deze code zet je programma 15 uur in de slaapstand. Minuten, seconden, dagen zijn ook beschikbaar. Evenals microseconden (1/1000.000) en nanoseconden (1/1000.000.000).

De TimeUnit klasse heeft de volgende eigenschappen:

  • nanoseconden:NANOSECONDS
  • microseconden:MICROSECONDS
  • milliseconden:MILLISECONDS
  • secondenSECONDS
  • minuten:MINUTES
  • uur:HOURS
  • dagen:DAYS

Het werken met deze eigenschappen is superhandig, omdat u niet hoeft na te denken over het omzetten van bijvoorbeeld uren in milliseconden. Dergelijke code is veel prettiger om te schrijven en te lezen.

Meer details zijn hier te lezen .