개발 공부는 어려워
Published 2022. 8. 22. 11:25
동기(sync) / 비동기(asyn) study/java
반응형

한번쯤은 동기, 비동기라는 말을 들어봤을 것이다.


동기(sync)는 한가지 작업이 끝난 후 다른 작업을 시작하는것이고 

 

비동기(async)는 다른 작업과 상관 없이 병렬처리를 하는것이다.


두 방식의 가장 큰 차이점은 동기는 선행작업이 존재하기 때문에 선행 작업의 return 값이 관련이 있다고 볼 수 있고,
비동기(async)는 서로의 return 값에 관련이 없다고 볼 수 있다.

 


1. 동기(sync)

package ex01.동기.비동기;

public class Ex_sync_async_No_Thread {

	public static void main(String[] args) {
		
		// Thread를 사용하지 않는 코드
		///////////////////////////////////////////////////////////////////////////////////////////////////////
		System.out.println("작업1 시작");
		try{
			Thread.sleep(1500);
			System.out.println("작업1 : 1000설정");
		}catch(Exception e) {
			e.printStackTrace();
		}
		System.out.println("작업1 종료");
		///////////////////////////////////////////////////////////////////////////////////////////////////////
		
		System.out.println("작업2 시작");
		try{
			Thread.sleep(500);
			System.out.println("작업2 : 1500설정");
		}catch(Exception e) {
			e.printStackTrace();
		}
		System.out.println("작업2 종료");
					
	}
}

위 코드를 보자 단순 Exception 처리만 하고 있으며 Thread를 사용하지 않는다.

 

더보기

비동기 처리 시작
비동기처리1 : 1000설정
비동기처리1 종료
비동기처리2 시작
비동기처리2 : 1500설정
비동기처리2 종료

이 코드의 결과를 보면 1.5초 0.5초로 두 내용의 시간 다른고 단순히 출력만 진행하는 내용이다. 이 코드를보면 누가봐도 작업1이 끝날떄까지 기다린 후 작업2를 진행하는것이 효율적이지 않다.

 


2. 비동기(async)

package ex01.동기.비동기;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class Ex_sync_async_Yes_Thread {

	public static void main(String[] args) {
		
		// Thread를 사용하는 코드
		ExecutorService  executorService = Executors.newCachedThreadPool();
		
		executorService.submit(() -> {
			log("작업1 시작");
			try {
				Thread.sleep(1500);
			}catch(Exception e) {
				e.printStackTrace();
			}
			log("작업1 종료");
		});
		
		log("작업2 시작");
		try {
			Thread.sleep(500);
		}catch(Exception e) {
			e.printStackTrace();
		}
		log("작업2 종료");
		
		executorService.shutdown();
	}
	
	private static void log(String content) {
		System.out.println(Thread.currentThread().getName() + "> " + content);
	}
	
}

Thread처리를 사용한 코드를 보자 이 코드의 결과는

 

더보기

main> 작업2 시작
pool-1-thread-1> 작업1 시작
main> 작업2 종료
pool-1-thread-1> 작업1 종료

 

main에서 실행되는 처리는 작업2이고 다른 Thread에서 작업1이 진행되는것을 볼 수 있다.

 

 

이처럼 다른 Thread를 사용하여 서로 연관성 없는, 시간이 다른 작업들을 병렬처리 할 수있다.

반응형

'study > java' 카테고리의 다른 글

비어있는 for문  (0) 2023.03.28
profile

개발 공부는 어려워

@신입개발자하랑이

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!