[java] Java에서 지연을 어떻게 방지합니까?

Java에서 무언가를 시도하고 있으며 while 루프에서 몇 초 동안 대기 / 지연 할 무언가가 필요합니다.

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를 처음 사용합니다. 어떤 제안?



답변

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

TimeUnit.SECONDS.sleep(1);

1 초 동안 자거나

TimeUnit.MINUTES.sleep(1);

잠을 자다.

이것이 루프이기 때문에 이것은 고유 한 문제인 드리프트를 나타냅니다. 코드를 실행 한 다음 잠들 때마다 매 초마다 조금씩 표류하게됩니다. 이것이 문제라면를 사용하지 마십시오 sleep.

또한 sleep제어와 관련하여 매우 유연하지 않습니다.

매초마다 또는 1 초 지연으로 작업을 실행하려면 a 및 또는 중 하나를 적극 권장합니다 .ScheduledExecutorServicescheduleAtFixedRatescheduleWithFixedDelay

예를 들어, 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");
}

그리고 자바 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();
}


답변

Thread.sleep()통화 를 사용해야합니다 .

자세한 정보는 여기 : http://docs.oracle.com/javase/tutorial/essential/concurrency/sleep.html


답변

이것을 사용하십시오 :

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

그런 다음이 방법을 다음과 같이 호출 할 수 있습니다 :

        wait(1000);


답변

사용 TimeUnit.SECONDS.sleep(1);또는 Thread.sleep(1000);허용 가능한 방법입니다. 두 경우 모두 InterruptedException코드를 벌크하게 만들어야합니다 InterruptedException. 내부에서 이미 다루는 유틸리티를 제공하는 MgntUtils (나에 의해 작성된)라는 오픈 소스 Java 라이브러리가 있습니다. 따라서 코드에는 한 줄만 포함됩니다.

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 문을 삽입 할 필요가 없습니다.