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

비동기처리(CompletableFuture.allOf())

by 오늘도 코딩 2021. 6. 23.
728x90
반응형

CompletableFuture로 간단하게 해결

*java 8버전부터 가능

 

 

▷ 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
Object List 정렬(Comparator.comparing())  (0) 2021.06.02
@EventListener Example  (0) 2021.05.18
파일 생성하기  (0) 2021.05.13

댓글