programing

자바에서 지연하려면 어떻게 해야 하나요?

minecode 2022. 7. 18. 22:39
반응형

자바에서 지연하려면 어떻게 해야 하나요?

자바에서 뭔가를 하려고 하는데 몇 초 동안 루프에서 대기/지연할 수 있는 것이 필요합니다.

while (true) {
    if (i == 3) {
        i = 0;
    }

    ceva[i].setSelected(true);

    // I need to wait here

    ceva[i].setSelected(false);

    // I need to wait here

    i++;
}

스텝 시퀀서를 만들고 싶은데 자바가 처음입니다.좋은 의견이라도 있나?

일시 중지하려면 다음 명령을 사용하십시오.java.util.concurrent.TimeUnit:

TimeUnit.SECONDS.sleep(1);

1초만 자거나

TimeUnit.MINUTES.sleep(1);

잠깐 자려고.

이것이 루프이기 때문에, 이것은 본질적인 문제인 드리프트를 일으킵니다.코드를 실행하고 나서 잘 때마다, 예를 들어 매초마다 조금씩 달리기에서 표류하게 됩니다.이것이 문제라면 사용하지 마세요.sleep.

더,sleep통제에 관해서는 그다지 유연하지 않습니다.

작업을 매초 또는 1초 지연으로 실행할 경우 및 또는 를 강력히 권장합니다.

예를 들어 메서드를 실행하려면myTask매초(Java 8):

public static void main(String[] args) {
    final ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();
    executorService.scheduleAtFixedRate(App::myTask, 0, 1, TimeUnit.SECONDS);
}

private static void myTask() {
    System.out.println("Running");
}

Java 7의 경우:

public static void main(String[] args) {
    final ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();
    executorService.scheduleAtFixedRate(new Runnable() {
        @Override
        public void run() {
            myTask();
        }
    }, 0, 1, TimeUnit.SECONDS);
}

private static void myTask() {
    System.out.println("Running");
}

사용하다Thread.sleep(1000);

1000프로그램이 일시정지되는 시간(밀리초)입니다.

try
{
    Thread.sleep(1000);
}
catch(InterruptedException ex)
{
    Thread.currentThread().interrupt();
}

사용방법:

public static void wait(int ms)
{
    try
    {
        Thread.sleep(ms);
    }
    catch(InterruptedException ex)
    {
        Thread.currentThread().interrupt();
    }
}

이 메서드를 다음과 같이 호출할 수 있습니다.

wait(1000);

를 사용해야 합니다.Thread.sleep()불러.

자세한 내용은 이쪽:http://docs.oracle.com/javase/tutorial/essential/concurrency/sleep.html

사용.TimeUnit.SECONDS.sleep(1);또는Thread.sleep(1000);받아들일 수 있는 방법입니다.두 가지 경우 모두, 이 두 가지를 잡아야 합니다.InterruptedException코드 부피가 커집니다.MgntUtils(저작자)라는 오픈 소스 자바 라이브러리가 있습니다.이 라이브러리는 이미 다음을 처리하는 유틸리티를 제공합니다.InterruptedException안에서.따라서 코드에는 다음 한 줄만 포함됩니다.

TimeUtils.sleepFor(1, TimeUnit.SECONDS);

javadoc을 참조하십시오.Maven Central 또는 Github에서 라이브러리에 액세스할 수 있습니다.도서관을 설명하는 기사는 여기에서 찾을 수 있다.

사용하다Thread.sleep(100);시간 단위는 밀리초입니다.

예를 들어 다음과 같습니다.

public class SleepMessages {
    public static void main(String args[])
        throws InterruptedException {
        String importantInfo[] = {
            "Mares eat oats",
            "Does eat oats",
            "Little lambs eat ivy",
            "A kid will eat ivy too"
        };

        for (int i = 0;
             i < importantInfo.length;
             i++) {
            //Pause for 4 seconds
            Thread.sleep(4000);
            //Print a message
            System.out.println(importantInfo[i]);
        }
    }
}

매우 오래된 게시물인 것은 알지만, 이 게시물이 도움이 될 수 있습니다.메서드를 만들 수 있으므로 일시 중지가 필요할 때마다pause(1000)또는 기타 밀리초 값:

public static void pause(int ms) {
    try {
        Thread.sleep(ms);
    } catch (InterruptedException e) {
        System.err.format("IOException: %s%n", e);
    }
}

이것은 의 바로 위에 삽입되어 있습니다.public static void main(String[] args), 클래스 내.그런 다음 메서드를 호출하려면pause(ms)대체하다ms일시 정지하는 시간(밀리초)을 지정합니다.이렇게 하면 일시 정지할 때마다 전체 try-catch 문을 삽입할 필요가 없습니다.

기다리는 방법도 하나 더 있다.

다음과 같은 LockSupport 방법을 사용할 수 있습니다.

LockSupport.parkNanos(1_000_000_000); // Disables current thread for scheduling at most for 1 second

다행히 체크된 예외는 없습니다.한편, 설명서에 의하면, 스레드를 유효하게 하는 이유는 다음과 같습니다.

  • 일부 다른 스레드가 현재 스레드를 대상으로 파크 해제를 호출합니다.
  • 일부 다른 스레드가 현재 스레드를 중단합니다.

언급URL : https://stackoverflow.com/questions/24104313/how-do-i-make-a-delay-in-java

반응형