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
- 쪽지기능
- 백준 2667
- 실버5
- BFS
- 너비우선탐색
- springboot
- 코딩테스트
- 노드프로젝트
- 프로그래머스
- email인증
- 노드개발자
- 코딩
- 파이썬
- 깊이우선탐색
- 앱개발
- nodejs
- static final
- SWEA
- Java
- 이메일인증
- 코테
- 노드개발
- 1260
- Python
- 브실이의입시전략
- 자바
- 백준
- 알고리즘
- Gmail인증
- DFS
Archives
- Today
- Total
데옹의 블로그
[SpringBoot] 동시성 문제 본문
동시성 문제란..?
동시성 문제는 동일한 자원에 대하여 여러 스레드가 동시에 접근하면서 발생하는 문제입니다.
코드로 살펴보고 싶지만 일단은 글로 예시를 적어보겠습니다.
[원래 계획]
(저는 빈츠를 좋아하는데요.)
동아리방에 접시가 놓여져있고
데옹은 방에 들어와서 빈츠를 접시에 두고 냉장고에 갔다 와서 빈츠를 먹을 계획을 합니다.
줄리도 같은 방에 들어와서 몽쉘을 접시에 두고 냉장고에 갔다 와서 몽쉘을 먹으려 합니다.
그렇다면 데옹은 빈츠를 먹고 줄리는 몽쉘을 먹는게 정상적인 진행이겠죠.
근데 과자를 놓을 수 있는 접시는 하나! 라면 어찌될까요..
[실제 진행]
1. 데옹이 방에 들어와 접시에 자신이 먹을 "빈츠"를 두고 잠깐 냉장고에 갔다.
2. 줄리가 방에 들어와 접시에 있는 빈츠를 "몽쉘"로 바꾸고 잠깐 냉장고에 갔다.
3. 데옹이 와서 과자를 들었는데 뭔 몽쉘이 손에 들려있다.
4. 줄리도 와서 몽쉘을 들었다.
[실제 결과]
결국엔 동일한 자원(과자를 놓고 먹을 수 있는 접시)에 여러 스레드(사람)이 접근해서 데옹은 계획이 다 망해버렸습니다..
위와 같은 경우가 코드로 본다면 같은 함수를 사용함에 있어, 원하는 결과값을 return 받기 전에 값이 바뀌어버리면 다른 결과를 출력하게 되는 것입니다.
근데 이런 문제는 지역 변수 에서는 발생하지 않습니다.
-> 지역 변수는 thread 마다 각각 다른 메모리 영역이 할당되기 때문
그럼 언제 발생을 하는가
- 인스턴스 필드 혹은 공용 필드(static과 같은)에 접근할 때 발생합니다.
- 값에 접근할 때가 아닌, 값을 변경할 때 발생합니다.- 즉, 읽어올 때는 동시성 문제가 발생하지 않습니다.
'SpringBoot' 카테고리의 다른 글
[Spring Boot] Java에서 final과 static (0) | 2023.07.03 |
---|---|
[Spring Boot] A problem occurred configuring root project '...'. (Intellij)(ERROR) (0) | 2023.03.18 |
[Spring Boot] JAR vs WAR (0) | 2023.03.18 |
[SpringBoot] Google Email 인증 코드 mail 보내기 (JDBC) (6) | 2023.01.21 |