스레드 사용 시 예외가 발생합니다.sleep(x) 또는 wait()
Java 프로그램을 지연시키거나 sleeve 상태로 전환하려고 했지만 오류가 발생했습니다.
이 안 돼요.Thread.sleep(x)
★★★★★★★★★★★★★★★★★」wait()
」
보고되지 않은 예외 java.disples.중단됨예외. 반드시 잡거나 투척을 선언해야 합니다.
요?Thread.sleep()
★★★★★★★★★★★★★★★★★」wait()
방??
당신은 앞으로 읽을 것이 많아요.예외 처리, 스레드화 및 스레드화 중단에 이르기까지 컴파일러 오류로부터.하지만 이렇게 하면 원하는 대로 할 수 있습니다.
try {
Thread.sleep(1000); //1000 milliseconds is one second.
} catch(InterruptedException ex) {
Thread.currentThread().interrupt();
}
하셨듯이, 를 「보다」로 둘러싸야 .try{...} catch{...}
블록입니다. 하지만 자바 1.5가 출시되었기 때문에 스레드와 동일한 TimeUnit 클래스가 있습니다.수면(밀리)이 더 편리합니다.수면 조작을 위한 시간 단위를 선택할 수 있습니다.
try {
TimeUnit.NANOSECONDS.sleep(100);
TimeUnit.MICROSECONDS.sleep(100);
TimeUnit.MILLISECONDS.sleep(100);
TimeUnit.SECONDS.sleep(100);
TimeUnit.MINUTES.sleep(100);
TimeUnit.HOURS.sleep(100);
TimeUnit.DAYS.sleep(100);
} catch (InterruptedException e) {
//Handle exception
}
또한 다음과 같은 추가 메서드가 있습니다.TimeUnit Oracle 문서
이것을 올바르게 하는 방법에 관한 이 훌륭한 간단한 투고를 봐 주세요.
기본적으로: catch the. 이 catch-block을 추가해야 합니다.그 게시물은 이것을 조금 더 자세히 설명한다.
예외를 처리하려면 다음 코딩 구성 사용
try {
Thread.sleep(1000);
} catch (InterruptedException ie) {
//Handle exception
}
말을 써라.Thread.sleep
try {
//thread to sleep for the specified number of milliseconds
Thread.sleep(100);
} catch ( java.lang.InterruptedException ie) {
System.out.println(ie);
}
Android(Java를 사용하는 유일한 경우)를 사용할 때는 스레드를 sleep 상태로 하는 대신 핸들러를 사용하는 것을 추천합니다.
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
Log.i(TAG, "I've waited for two hole seconds to show this!");
}
}, 2000);
참고 자료: http://developer.android.com/reference/android/os/Handler.html
이것을 시험해 보세요.
try{
Thread.sleep(100);
}catch(Exception e)
{
System.out.println("Exception caught");
}
자바 프로그램에 지연을 추가하는 방법
public void pause1(long sleeptime) {
try {
Thread.sleep(sleeptime);
} catch (InterruptedException ex) {
//ToCatchOrNot
}
}
public void pause2(long sleeptime) {
Object obj = new Object();
if (sleeptime > 0) {
synchronized (obj) {
try {
obj.wait(sleeptime);
} catch (InterruptedException ex) {
//ToCatchOrNot
}
}
}
}
public void pause3(long sleeptime) {
expectedtime = System.currentTimeMillis() + sleeptime;
while (System.currentTimeMillis() < expectedtime) {
//Empty Loop
}
}
이는 순차 지연에 대한 것이지만 루프 지연에 대한 내용은 Java Delay/Wait를 참조하십시오.
public static void main(String[] args) throws InterruptedException {
//type code
short z=1000;
Thread.sleep(z);/*will provide 1 second delay. alter data type of z or value of z for longer delays required */
//type code
}
예:-
class TypeCasting {
public static void main(String[] args) throws InterruptedException {
short f = 1;
int a = 123687889;
short b = 2;
long c = 4567;
long d=45;
short z=1000;
System.out.println("Value of a,b and c are\n" + a + "\n" + b + "\n" + c + "respectively");
c = a;
b = (short) c;
System.out.println("Typecasting...........");
Thread.sleep(z);
System.out.println("Value of B after Typecasting" + b);
System.out.println("Value of A is" + a);
}
}
은 '기다리다'를 사용하는 입니다.System.currentTimeMillis()
1일 밀리초수를 '5'는 '5'는 다음과 같습니다.
public static void main(String[] args) {
//some code
long original = System.currentTimeMillis();
while (true) {
if (System.currentTimeMillis - original >= 5000) {
break;
}
}
//more code after waiting
}
이렇게 하면, 당신은 실과 예외를 가지고 장난칠 필요가 없습니다.이게 도움이 됐으면 좋겠네요!
java.util.concurrent.TimeUnit
:
TimeUnit.SECONDS.sleep(1);
1초만 자거나
TimeUnit.MINUTES.sleep(1);
잠깐 주무세요.
이것이 루프이기 때문에, 이것은 본질적인 문제인 드리프트를 일으킵니다.코드를 실행하고 나서 잘 때마다, 예를 들어 매초마다 조금씩 달리기에서 표류하게 됩니다.가 있는 는, 「일부러」를 하지 말아 주세요sleep
.
,,sleep
통제에 관해서는 그다지 유연하지 않습니다.
작업을 매초 또는 1초 지연으로 실행할 경우 []를 강력히 권장합니다.ScheduledExecutorService
[1] 및 [1] 중 하나scheduleAtFixedRate
] [ 2 ]또는 [ ]scheduleWithFixedDelay
][3].
메서드를 실행하려면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");
}
Thread.sleep()
초보자용 심플하고 유닛 테스트 및 개념 증명에 적합합니다.
그러나 사용하지 마십시오.sleep()
제품 코드의 경우.결국.sleep()
심하게 물릴 수도 있어요
멀티스레드/멀티코어 Java 응용 프로그램에서 "스레드 대기" 개념을 사용하는 모범 사례입니다.Wait는 스레드에 의해 유지되는 모든 잠금 및 모니터를 해제하여 스레드가 평화롭게 sleeve 상태일 때 다른 스레드가 해당 모니터를 획득할 수 있도록 합니다.
다음 코드는 이 기술을 보여줍니다.
import java.util.concurrent.TimeUnit;
public class DelaySample {
public static void main(String[] args) {
DelayUtil d = new DelayUtil();
System.out.println("started:"+ new Date());
d.delay(500);
System.out.println("half second after:"+ new Date());
d.delay(1, TimeUnit.MINUTES);
System.out.println("1 minute after:"+ new Date());
}
}
DelayUtil
구현:
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.ReentrantLock;
public class DelayUtil {
/**
* Delays the current thread execution.
* The thread loses ownership of any monitors.
* Quits immediately if the thread is interrupted
*
* @param durationInMillis the time duration in milliseconds
*/
public void delay(final long durationInMillis) {
delay(durationInMillis, TimeUnit.MILLISECONDS);
}
/**
* @param duration the time duration in the given {@code sourceUnit}
* @param unit
*/
public void delay(final long duration, final TimeUnit unit) {
long currentTime = System.currentTimeMillis();
long deadline = currentTime+unit.toMillis(duration);
ReentrantLock lock = new ReentrantLock();
Condition waitCondition = lock.newCondition();
while ((deadline-currentTime)>0) {
try {
lock.lockInterruptibly();
waitCondition.await(deadline-currentTime, TimeUnit.MILLISECONDS);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
return;
} finally {
lock.unlock();
}
currentTime = System.currentTimeMillis();
}
}
}
또는 스레드를 취급하지 않는 경우는, 다음의 방법을 사용해 주세요.
public static void pause(int seconds){
Date start = new Date();
Date end = new Date();
while(end.getTime() - start.getTime() < seconds * 1000){
end = new Date();
}
}
호출할 때 시작하여 초수가 경과하면 종료됩니다.
언급URL : https://stackoverflow.com/questions/3342651/i-get-exception-when-using-thread-sleepx-or-wait
'source' 카테고리의 다른 글
Java8 스트림 요소를 기존 목록에 추가하는 방법 (0) | 2022.11.28 |
---|---|
MariaDB 10.5.8에서 Django 이행 실행 시 문제 (0) | 2022.11.28 |
스탠드아론 mariaDB 서버에 비해 galera의 퍼포먼스가 매우 나쁘다 (0) | 2022.11.28 |
휴지 상태 오류: 동일한 식별자 값을 가진 다른 개체가 세션에 이미 연결되어 있습니다. (0) | 2022.11.28 |
비활성화된 입력에 대한 이벤트 (0) | 2022.11.19 |