자바에서 지연하려면 어떻게 해야 하나요?
자바에서 뭔가를 하려고 하는데 몇 초 동안 루프에서 대기/지연할 수 있는 것이 필요합니다.
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
'programing' 카테고리의 다른 글
이중이 정수인지 검사하는 방법 (0) | 2022.08.11 |
---|---|
어레이가 늘인지 비어 있는지 확인하려면 어떻게 해야 합니까? (0) | 2022.08.11 |
Vue 루트:Uncaught Type Error: 창.Vue.use는 함수가 아닙니다. (0) | 2022.07.18 |
vue-resize-direction이 실행되지 않는 이유는 무엇입니까? (0) | 2022.07.18 |
vue.js: nextTick은 데이터 변경 후 돔 렌더링을 완료하려면 어떻게 해야 합니까? (0) | 2022.07.18 |