반응형
Synchronous(동기)
- '동시에 일어난다'
- 한 작업이 끝나야만 다음 작업이 시작됨
특징
- 순차적 실행 : 작업이 순차적으로 실행되며, 하나의 작업이 완료되어야 다음 작업으로 넘어감
- 대기 : 현재 작업이 완료될 때까지 다른 작업이 대기해야 함
예시
- 파일 읽기 : 파일을 읽는 동안 프로그램은 파일이 완전히 읽힐 때까지 대기
- HTTP 요청 : 요청을 보내고 응답이 올 때까지 대기
- 요리하는 상황에서, 물이 끓는 동안 면 넣기를 할 수 없는 것
public class SynchronousExample {
public static void main(String[] args) {
System.out.println("작업 1 시작");
try {
Thread.sleep(2000); // 2초 대기
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("작업 1 완료");
System.out.println("작업 2 시작");
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("작업 2 완료");
}
}
작업 1 시작
작업 1 완료
작업 2 시작
작업 2 완료
Asynchronous(비동기)
- '동시에 일어나지 않는다'
- 작업이 완료되기를 기다리지 않고 다른 작업을 동시에 진행할 수 있음
특징
- 병렬 처리 : 여러 작업을 동시에 처리할 수 있으며, 하나의 작업이 완료되지 않아도 다른 작업을 계속 진행할 수 있음
- 콜백 : 작업이 완료되면 특정 함수(콜백)을 호출하여 결과를 처리
예시
- 파일 다운로드 : 다운로드를 시작한 후, 다운로드가 완료될 때까지 기다리지 않고 다른 작업 수행
- 이벤트 리스너 : 버튼 클릭 이벤트와 같은 사용자 입력을 처리할 때, 입력이 발생했을 때만 처리
- 요리하는 과정에서, 물이 끓는 동안 스프를 넣는 것
console.log("작업 1 시작");
setTimeout(() => {
console.log("작업 1 완료");
}, 2000); // 2초 후 작업 1 완료
console.log("작업 2 시작");
// 작업 2는 즉시 실행됨
console.log("작업 2 완료");
작업 1 시작
작업 2 시작
작업 2 완료
작업 1 완료
비교
특성 | 동기 | 비동기 |
---|---|---|
실행 방식 | 순차적으로 실행 | 동시에 여러 작업을 실행 |
대기 여부 | 현재 작업이 완료될 때까지 대기 | 현재 작업을 기다리지 않고 진행 |
복잡성 | 상대적으로 간단 | 콜백, 프라미스, 스레드 관리 필요 |
사용 예시 | 파일 읽기, 계산 작업 | 웹 요청, 파일 다운로드, 이벤트 처리 |
반응형
'JAVA' 카테고리의 다른 글
[JAVA] 스레드 안전(Thread-safe) 완벽 가이드 : 동기화, 원자적 연산, 락을 통한 동기화 (1) | 2025.02.10 |
---|---|
[JAVA] 익명 함수(Anonymous Function)와 람다 표현식 (1) | 2025.02.03 |
Iterator, for문과의 차이 (1) | 2025.01.26 |
Generic(제네릭) (0) | 2025.01.22 |
org.slf4j.Logger vs System.out.print (1) | 2025.01.21 |