본문 바로가기
▶ Back-End/Java

CompletableFuture 비동기처리

by 오늘도 코딩 2021. 6. 23.
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

댓글