1.Thread.sleep()

Du kan indsætte pauser i udførelsen af ​​et Java-program. Dette er normalt ikke nødvendigt, da brugerne ønsker, at deres programmer skal køre så hurtigt som muligt. Ikke mange mennesker ville være glade, hvis du bevidst bremsede din kode.

Men som programmør kan der være tonsvis af situationer, hvor en pause i din kode vil være nyttig. Antag for eksempel, at du skriver et spil, og du vil have det til at gøre noget hvert andet sekund eller flere gange i sekundet.

Grundlæggende er pauser nyttige, så lad os se, hvordan du tilføjer en pause til din kode. Det er faktisk meget enkelt:

Thread.sleep(duration);

Hvor duration er længden af ​​pausen i millisekunder ( 1/1000af et sekund).

Denne erklæring vil sætte dit program på pause i duration millisekunder. Eksempler:

Thread.sleep(2000);
Sætter programmet på pause i 2 sekunder.
Thread.sleep(500);
Sætter programmet på pause i et halvt sekund.
Thread.sleep(60 * 60 * 1000);
Sætter programmet på pause i 1 time.

Her er hvordan det kan bruges i praksis. Lad os sige, at vi skriver et program, der vil opsende et rumskib. Sådan kan koden se ud:

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

System.out.println("Let's go!");
Hvert sekund vil programmet vise et tal: 10, derefter 9, derefter 8, osv.




Når optællingen når 0, vil programmet vise " Let's go!"

2. Beregning af en pause korrekt

Længden af ​​pausen er let at beregne. Hvis du skal bruge programmet til at gøre noget en gang i sekundet, så er pausen 1000 ms. Hvis 2 gange i sekundet, så pause i 500ms (1000/2).

Hvis du skal gøre noget 15 gange i sekundet, skal du holde pause i 66 ms (1000/15). Det hele virker ret ligetil:

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

Men der er en meget vigtig nuance her. Selvom mange udsagn udføres meget hurtigt, er de ikke øjeblikkelige.

Se det her. Lad os sige, at du har en handling, der tager 100 ms at fuldføre. Du ønsker at udføre denne handling 5 gange i sekundet. Hvor længe skal du holde pause? Absolut ikke 200ms.

For at handlingen skal udføres 5 gange i sekundet, skal den tid, der kræves til at udføre handlingen plus pausevarigheden, være lig med 200 ms. Hvis vi gør det, så kører den præcis 5 gange i sekundet. I vores tilfælde kræver handlingen 100 ms, hvilket betyder, at der stadig er 100 ms tilbage til pausen.

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

Spiludviklere er godt klar over, at den tid, der kræves for at udføre en handling, er meget højere end nul. Og det er de mennesker, der spiller spil.

Hvis et spil kører med 20 FPS, betyder det, at det kun kan tegne 20 billeder på skærmen på et sekund. 1000/20giver 50 ms. Dette er den tid, det tager at tegne en ramme, mens du spiller spillet.



3. Nanosekunder

Computere i dag er meget hurtigere, end da Java blev skabt. Det betyder, at en pause på 1 millisekund muligvis ikke er tilstrækkelig granulær.

Antag, at vi har en meget kort handling, som vi vil udføre 2000 gange i sekundet. Hvordan holder vi pause i et halvt millisekund?

Til dette er der endnu en variant af metoden Thread.sleep():

Thread.sleep(milliseconds, nanoseconds);

Denne metode sætter programmet i dvale i det angivne antal millisekunder og nanosekunder.

Nanosekunder er 1 milliontedel af et millisekund. Det betyder, at en pause på halvandet millisekund ville se sådan ud:

Thread.sleep(1, 500_000);

Og hvis du vil have en pause på 1/10et millisekund, skal du skrive dette:

Thread.sleep(0, 100_000);

Du bruger muligvis ikke denne metode i dine programmer lige nu. Men det er bedre at vide om det og ikke bruge det, end at have brug for det og ikke vide om det.



4. TimeUnitklasse

Java har i øvrigt en anden klasse, der vil gøre dit liv lettere, hvis du beslutter dig for at bremse din applikation. Vi taler om TimeUnitklassen i java.util.concurrentpakken.

Husk, at da klassen ikke er i java.langpakken, så skal du enten tilføje linjen import java.util.concurrent.TimeUnit;eller skrive java.util.concurrent.TimeUnithver gang i din kode.

Denne klasse gør det samme som Thread.sleep(), men det er mere praktisk:

TimeUnit.HOURS.sleep(15)

Denne kode sætter dit program i dvale i 15 timer. Minutter, sekunder, dage er også tilgængelige. Samt mikrosekunder (1/1000.000) og nanosekunder (1/1000.000.000).

Klassen TimeUnit har følgende egenskaber:

  • nanosekunder:NANOSECONDS
  • mikrosekunder:MICROSECONDS
  • millisekunder:MILLISECONDS
  • sekunderSECONDS
  • minutter:MINUTES
  • timer:HOURS
  • dage:DAYS

Arbejdet med disse egenskaber er super bekvemt, da der ikke er behov for at tænke på at konvertere f.eks. timer til millisekunder. Sådan kode er meget mere behagelig at skrive og læse.

Flere detaljer kan læses her .