Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 프로그래밍
- 납입
- 파이썬
- 교보생명
- 리스트
- 인출수수료
- 중도인출
- PythonProgramming
- 코딩
- 추가납입
- 보험료
- Java
- 사망
- 교보
- 웹개발
- 자바스크립트
- javascript
- 특약
- jQuery
- 심장질환
- 문자열
- python
- 수수료
- 프론트엔드
- 급성심근경색증
- 가입
- 뇌출혈
- 보험
- 변환
- Vue.js
Archives
- Today
- Total
SeouliteLab
[Java/자바] Thread.join()에 Timeout 적용 본문
Java의 Thread.join()
메서드는 대기중인 스레드가 종료될 때까지 기다리는 기능을 제공합니다. 그러나 때로는 일정 시간 이상 대기하고자 할 때도 있습니다. 이를 위해 Timeout을 적용하는 방법을 살펴보겠습니다.
1. join() 메서드에 Timeout 적용하기
Java에서는 join(long milliseconds)
메서드를 사용하여 Timeout을 적용할 수 있습니다. 이 메서드는 지정된 시간(밀리초) 동안 대상 스레드가 종료될 때까지 대기하다가 Timeout이 발생하면 다음 작업으로 넘어갑니다.
public class JoinWithTimeoutExample {
public static void main(String[] args) throws InterruptedException {
Thread thread = new Thread(() -> {
try {
Thread.sleep(3000); // 3초 동안 대기
} catch (InterruptedException e) {
e.printStackTrace();
}
});
thread.start();
// 지정된 시간(밀리초) 동안 대기, Timeout: 2초
thread.join(2000);
if (thread.isAlive()) {
// Timeout 발생 시 처리할 작업
System.out.println("Thread did not complete within the timeout period.");
} else {
System.out.println("Thread completed successfully.");
}
}
}
2. 여러 스레드에 각각 Timeout 적용하기
여러 스레드에 각각 다른 Timeout을 적용할 수도 있습니다. 아래 예제에서는 두 개의 스레드에 각각 다른 Timeout을 적용하여 Timeout이 발생하는 경우를 살펴봅니다.
public class MultipleJoinWithTimeoutExample {
public static void main(String[] args) throws InterruptedException {
Thread thread1 = new Thread(() -> {
try {
Thread.sleep(3000); // 3초 동안 대기
} catch (InterruptedException e) {
e.printStackTrace();
}
});
Thread thread2 = new Thread(() -> {
try {
Thread.sleep(2000); // 2초 동안 대기
} catch (InterruptedException e) {
e.printStackTrace();
}
});
thread1.start();
thread2.start();
// 스레드 1의 Timeout: 2초
thread1.join(2000);
// 스레드 2의 Timeout: 3초
thread2.join(3000);
if (thread1.isAlive()) {
System.out.println("Thread 1 did not complete within the timeout period.");
} else {
System.out.println("Thread 1 completed successfully.");
}
if (thread2.isAlive()) {
System.out.println("Thread 2 did not complete within the timeout period.");
} else {
System.out.println("Thread 2 completed successfully.");
}
}
}
'프로그래밍' 카테고리의 다른 글
[Java/자바] 파일 경로 다루기: getPath(), getAbsolutePath(), getCanonicalPath() 메서드 비교 (0) | 2024.03.15 |
---|---|
[Java/자바]Map.entrySet()에 대한 forEach (0) | 2024.03.15 |
[Java/자바] Thread.join() 메서드 (0) | 2024.03.15 |
[Java/자바] forEach 사용 방법 (0) | 2024.03.15 |
[Java/자바] Future 사용 방법과 예제 (0) | 2024.03.15 |