1.Thread.sleep()

Java 프로그램 실행에 일시정지를 삽입할 수 있습니다. 사용자는 프로그램이 가능한 한 빨리 실행되기를 원하기 때문에 일반적으로 필요하지 않습니다. 의도적으로 코드 속도를 늦춘다면 기뻐할 사람은 많지 않을 것입니다.

그러나 프로그래머로서 코드의 일시 중지가 유용한 상황이 많이 있을 수 있습니다. 예를 들어, 게임을 작성 중이고 2초에 한 번 또는 1초에 여러 번 무언가를 수행하기를 원한다고 가정합니다.

기본적으로 일시 중지는 유용하므로 코드에 일시 중지를 추가하는 방법을 살펴보겠습니다. 실제로 매우 간단합니다.

Thread.sleep(duration);

여기서 duration 일시 중지 길이는 밀리초( 1/10001초)입니다.

이 명령문은 밀리초 동안 프로그램을 일시 중지합니다 duration . 예:

Thread.sleep(2000);
2초 동안 프로그램을 일시 중지합니다.
Thread.sleep(500);
0.5초 동안 프로그램을 일시 중지합니다.
Thread.sleep(60 * 60 * 1000);
1시간 동안 프로그램을 일시 중지합니다.

다음은 실제로 사용하는 방법입니다. 우주선을 발사하는 프로그램을 작성한다고 가정해 봅시다. 코드는 다음과 같습니다.

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

System.out.println("Let's go!");
프로그램은 1초마다 숫자를 표시합니다: 10, 다음 9, 다음 8등.




카운트가 에 도달하면 0프로그램에 " Let's go!"가 표시됩니다.

2. 정확한 일시정지 계산

일시 중지 길이는 계산하기 쉽습니다. 프로그램이 1초에 한 번 무언가를 수행해야 하는 경우 일시 중지는 1000ms입니다. 초당 2회인 경우 500ms(1000/2) 동안 일시 중지합니다.

초당 15회 수행해야 하는 경우 66ms(1000/15) 동안 일시 중지합니다. 모두 간단해 보입니다.

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

그러나 여기에는 매우 중요한 뉘앙스가 있습니다. 많은 명령문이 매우 빠르게 실행되지만 즉각적이지는 않습니다.

이거 봐요. 완료하는 데 100ms가 걸리는 작업이 있다고 가정해 보겠습니다. 이 작업을 초당 5회 수행하려고 합니다. 언제까지 멈춰야 할까요? 확실히 200ms는 아닙니다.

작업이 초당 5회 수행되려면 작업을 실행하는 데 필요한 시간 에 일시 중지 기간을 더한 200ms가 필요합니다. 그렇게 하면 초당 정확히 5번 실행됩니다. 우리의 경우 작업에는 100ms가 필요하며 이는 일시 중지에 아직 100ms가 남아 있음을 의미합니다.

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

게임 개발자는 행동을 실행하는 데 필요한 시간이 0보다 훨씬 길다는 사실을 잘 알고 있습니다 . 그리고 게임을 하는 사람들도 마찬가지입니다.

게임이 20FPS로 실행된다면 1초에 화면에 20프레임만 그릴 수 있다는 의미입니다. 1000/2050ms를 산출합니다. 게임을 하면서 프레임을 그리는 데 필요한 시간 입니다 .



3. 나노초

오늘날의 컴퓨터는 Java가 만들어졌을 때보다 훨씬 빠릅니다. 즉, 1밀리초의 일시 중지는 충분히 세분화되지 않을 수 있습니다.

초당 2000회 수행하려는 아주 짧은 작업이 있다고 가정합니다. 0.5밀리초 동안 어떻게 일시 중지합니까?

이를 위해 방법의 변형이 하나 더 있습니다 Thread.sleep().

Thread.sleep(milliseconds, nanoseconds);

이 방법은 지정된 양의 밀리초 및 나노초 동안 프로그램을 절전 모드로 전환합니다.

나노초는 100만분의 1밀리초입니다. 즉, 1.5밀리초의 일시 중지는 다음과 같습니다.

Thread.sleep(1, 500_000);

그리고 1밀리초의 일시 중지를 원하면 1/10다음과 같이 작성해야 합니다.

Thread.sleep(0, 100_000);

현재 프로그램에서 이 방법을 사용하지 않을 수도 있습니다. 그러나 그것에 대해 알고 그것을 사용하지 않는 것이 필요하지만 그것에 대해 알지 못하는 것보다 낫습니다.



4. TimeUnit클래스

그건 그렇고, Java에는 응용 프로그램 속도를 낮추기로 결정한 경우 삶을 더 쉽게 만들어 줄 또 다른 클래스가 있습니다. TimeUnit우리는 패키지 의 클래스 에 대해 이야기하고 있습니다 java.util.concurrent.

클래스가 패키지에 없기 때문에 java.lang행을 추가하거나 매번 코드에 import java.util.concurrent.TimeUnit;작성 해야 합니다.java.util.concurrent.TimeUnit

이 클래스는 와 동일한 작업을 수행 Thread.sleep()하지만 더 편리합니다.

TimeUnit.HOURS.sleep(15)

이 코드는 프로그램을 15시간 동안 절전 모드로 전환합니다. 분, 초, 일도 사용할 수 있습니다. 마이크로초(1/1000,000) 및 나노초(1/1000,000,000)도 있습니다.

TimeUnit 클래스에는 다음과 같은 속성이 있습니다.

  • 나노초:NANOSECONDS
  • 마이크로초:MICROSECONDS
  • 밀리초:MILLISECONDS
  • SECONDS
  • 분:MINUTES
  • 시간:HOURS
  • 날:DAYS

예를 들어 시간을 밀리초로 변환하는 것에 대해 생각할 필요가 없기 때문에 이러한 속성으로 작업하는 것이 매우 편리합니다. 이러한 코드는 쓰고 읽는 것이 훨씬 더 즐겁습니다.

자세한 내용은 여기에서 읽을 수 있습니다 .