Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 스프링부트
- spring
- IPC
- JPA
- ./gradlew docker
- 로그인 인증 흐름
- 어노테이션
- 동기
- RESTfull API
- 스프링
- 작업명중복
- 프레젠테이션 계층
- ORM
- java I/O
- @temproal
- http
- 비즈니스 계층
- 스프링 부트 테스트
- formmatted
- 스프링부트 구조
- 로그인/로그아웃
- 비동기
- ./gr
- 토큰기반 인증
- JWT
- 세션기반 인증
- Java
- 스프링부트 계층구조
- MSA
- 퍼시스턴스 계층
Archives
- Today
- Total
[DEV] J-Jay
동기와 비동기 본문
728x90
Caller와 Callee
- 함수가 다른 함수를 호출하는 상황
- Caller : 호출하는 함수
- Callee: 호출 당하는 함수
함수형 인터페이스
- 함수형 프로그래밍을 지원하기 위해 java 8부터 도입
- 1개의 추상 메서드를 가지고 있는 인터페이스
- 함수를 변수에 할당하거나 인자로 전달하고 반환값으로 사용 가능하다 (1급 객체)
- Fuction, Consumer, Supplier, Runnable 등이 있다
- 함수형 인터페이스를 구현한 익명 클래스를 람다식으로 변경 가능하다
A (동기)
- main은 getResult() 메소드의 결과에 관심이 있고, getResult() 결과를 이용해 다음 코드를 실행한다
public class A {
public static void main(String[] args) {
System.out.println("Start main");
var result = getResult();
var nextValue = result + 1;
assert nextValue == 1;
System.out.println("Finish main");
}
private static int getResult() {
System.out.println("Start getResult");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
var result = 0;
try {
return result;
} finally {
System.out.println("Finish getResult");
}
}
}
B(비동기)
- main은 getResult() 메소드의 결과에 관심이 없고, getResult() 결과를 이용해서 함수형 인터페이스를 실행한다
public class B {
public static void main(String[] args) {
System.out.println("Start main");
getResult(new Consumer<Integer>() {
@Override
public void accept(Integer integer) {
var nextValue = integer + 1;
assert nextValue ==1;
}
});
System.out.println("Finish main");
}
private static void getResult(Consumer<Integer> cb) {
System.out.println("Start getResult");
try {
Thread.sleep(1000);
}catch (InterruptedException e){
throw new RuntimeException(e);
}
var result = 0;
cb.accept(result);
System.out.println("Finish getResult");
}
}
결론
동기 | 비동기 |
Caller는 Callee의 결과에 관심이 있다 | Caller는 callee의 결과에 관심이 없다 |
Caller는 결과를 이용해서 action을 수행한다 | Callee는 결과를 이용해서 Callback을 수행한다 |
'Back-end > MSA' 카테고리의 다른 글
MSA 분해로 인해 생긴 문제 해결 방법 (0) | 2024.04.25 |
---|---|
MSA 분해로 생긴 문제들 (1) | 2024.04.25 |
ExecutorService (0) | 2024.03.04 |
Future (0) | 2024.03.04 |
Blocking vs Non-Blocking (1) | 2024.02.26 |