728x90
반응형
CompletableFuture로 간단하게 해결
*java 8버전부터 가능
▷ CompletableFuture 란?
- 비동기 처리 : CompletableFuture는 작업을 백그라운드 스레드에서 실행하고, 결과를 비동기적으로 반환하는데 사용
- 동기화: 작업이 완료될 때까지 기다린후, 그 결과를 처리
▷ 주요 메소드
메소드 | 설명 |
runAsync() | Runnable을 실행하는 비동기 작업을 생성 |
thenApply() | 이전 작업의 결과를 입력받아 후속 작업을 실행 |
allOf() | 여러 CompletableFuture가 모두 완료될 때까지 기다리는 메소드 |
anyOf() | 여러 CompletableFuture 중 하나라도 완료되면 처리할 메소드 |
▷ Example
public void asyncExample() {
/* Example job_01 */
CompletableFuture job_01 = CompletableFuture.runAsync(() -> {
try {
Thread.sleep(4000);
System.out.println(">> [job_01] 4초 대기");
} catch (Exception e) {
e.printStackTrace();
}
});
/* Example job_02 */
CompletableFuture job_02 = CompletableFuture.runAsync(() -> {
try {
Thread.sleep(1000);
System.out.println(">> [job_02] 1초 대기");
} catch (Exception e) {
e.printStackTrace();
}
});
/* Example job_03 */
CompletableFuture job_03 = CompletableFuture.runAsync(() -> {
try {
Thread.sleep(1500);
System.out.println(">> [job_03] 1.5초 대기");
} catch (Exception e) {
e.printStackTrace();
}
});
try {
long beforeTime = System.currentTimeMillis(); // 시작 시간
// 가장 처음에 실행
System.out.println("=====================비동기 테스트 시작=====================");
// 3개의 job을 동시에 수행을 하고 모두 완료가 될때 까지 대기(파라미터 순서와 관계 없음)
CompletableFuture.allOf(job_02, job_01, job_03).get();
long afterTime = System.currentTimeMillis(); // 종료 시간
/* 두 시간에 차 계산*/
long secDiffTime = (afterTime - beforeTime)/1000;
System.out.println();
System.out.println(">> [실행시간] : "+secDiffTime +"초");
// 가장 마지막에 실행
System.out.println("=====================비동기 테스트 종료=====================");
} catch (Exception e) {
e.printStackTrace();
}
}
/*
결과 :
=====================비동기 테스트 시작=====================
>> [job_02] 1초 대기
>> [job_03] 1.5초 대기
>> [job_01] 4초 대기
>> [실행시간] : 4초
=====================비동기 테스트 종료=====================
*/
728x90
728x90
'▶ Back-End > Java' 카테고리의 다른 글
Java 환경변수 설정 (0) | 2022.05.10 |
---|---|
Java 11 버전 설치 방법 (0) | 2022.05.10 |
@EventListener Example (0) | 2021.05.18 |
파일 생성하기 (0) | 2021.05.13 |
파일 검색 후 파일 읽기 (0) | 2021.05.13 |
댓글