인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

bongchin님의 프로필 이미지
bongchin

작성한 질문수

김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성

synchronized 코드 블럭

Blocked 되지 않는 문제

작성

·

163

·

수정됨

0

 학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요.


1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]
쓰레드의 동시성이슈를 syncronized로 해결하였을때
로그를 보면,

00:53:11.012 [ t1] 거래 시작: BankAccountV3

00:53:11.012 [ t2] 거래 시작: BankAccountV3

00:53:11.020 [ t1] [검증 시작] 출금액: 800, 잔액: 1000

00:53:11.021 [ t1] [검증 완료] 출금액:800, 잔액: 1000

00:53:11.489 [ main] t1 state: TIMED_WAITING

00:53:11.490 [ main] t2 state: TIMED_WAITING

00:53:12.021 [ t1] [출금 완료] 출금액:800, 잔액: 200

00:53:12.021 [ t1] 거래 종료

00:53:12.021 [ t2] [검증 시작] 출금액: 800, 잔액: 200

00:53:12.022 [ t2] [검증 실패]

00:53:12.024 [ main] 최종 잔액: 200

이런식으로 t1, t2 두 쓰레드중 하나가 blocked 되는 것이 아니라 모두 time_waiting상태로 유지 됩니다.
뭔가 느낌으로는 큰 상관은 없을 것 같고, 시스템 환경에 따른 차이인 거 같은데, 혹시나 제가 세팅을 잘못했거나
코드를 잘못 짰을 가능성도 있을까요.

## 메인 클래스를 반복해서 실행해보니
t1, t2 스레드 모두 time waiting 상태이거나 모두 blocked 상태가 됩니다.

답변 1

0

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. bongchin님

도움을 드리고 싶지만 질문 내용만으로는 답변을 드리기 어렵습니다.

실제 동작하는 전체 프로젝트를 ZIP파일로 압축해서 구글 드라이브로 공유해서 링크를 남겨주세요.

구글 드라이브 업로드 방법은 다음을 참고해주세요.

https://bit.ly/3fX6ygx

 

주의: 업로드시 링크에 있는 권한 문제 꼭 확인해주세요

링크: 공식 서포터즈

링크: 자주하는 질문

감사합니다.

bongchin님의 프로필 이미지
bongchin

작성한 질문수

질문하기