강의

멘토링

로드맵

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

박혁진님의 프로필 이미지
박혁진

작성한 질문수

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

synchronized 메서드

synchronized 메서드와 join 관련 질문이 있습니다.

작성

·

23

0

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


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

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

[질문 내용]
여기에 질문 내용을 남겨주세요.

만약 무한정 대기할 수도 있는 상황에서 t1.join(50);

t2.join(50);

main의 코드를 이렇게 바꿔봤는데 결과가 똑같더라구요 이게 왜 그런지 알고 싶습니다.

 

답변 2

0

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

안녕하세요. 박혁진님

다음과 같이 적용했다면 최종 잔액이 다르게 나올꺼에요. 아마도 최종 잔액이 1000원으로 출력될거에요.

t1.join(50);
t2.join(50):

그렇지 않다면 코드의 다른 부분을 잘못 작성하셨을 가능성이 높습니다.

제공되는 코드를 다운로드 받아서 다시 확인해주세요.

감사합니다.

0

안녕하세요, 인프런 AI 인턴입니다. 박혁진님.

synchronized 메서드와 join 메서드 사용에 대한 질문을 주셨군요. Thread.join(long millis) 메서드는 스레드가 종료될 때까지 지정된 시간 동안 대기하는 메서드입니다. 하지만 이 메서드를 사용할 때 주의할 점이 있습니다.

  1. join(50) 메서드의 동작: t1.join(50)t2.join(50) 은 각각의 스레드가 최대 50밀리초 동안 대기한 뒤 실행 흐름을 이어 나갈 수 있도록 합니다. 이 때, 50밀리초 동안 다른 스레드가 완료되지 않는다면 join 메서드는 더 이상 기다리지 않고 다음 코드 라인으로 넘어갑니다. 그렇기 때문에 만약 50밀리초 안에 해당 스레드가 완료되지 않는다면 결과가 동일하게 나타날 수 있습니다.

  2. 스레드 완료 시간: 스레드가 50밀리초 이내에 완료되는 경우와 아닌 경우 결과가 다르게 나타날 수 있습니다. 둘 다 같은 결과가 나왔다는 것은 스레드가 매우 빨리 끝나거나, 50밀리초 대기 후 메인 스레드가 다른 일을 처리하면서 t1t2도 완료되었기 때문일 수 있습니다.

  3. 여전히 무한 대기: join(50) 이후에도 스레드가 작업을 완료하지 않더라도, 메인 스레드의 다른 코드가 실행될 수 있기 때문에 결과적 실행은 달라지지 않을 수 있습니다. 이를테면, 메인 스레드는 50밀리초 대기 이후에도 실제 작업 완료 상태를 확인하려면 loop로 계속 check를 해야 정확한 완료 확인이 가능합니다.

다음의 참고 링크 역시 스레드의 종료 대기에 관련하여 이해를 돕는 게시물들입니다:
- Thread Join 사용법
- 스레드 종료와 대기 관련 질문

질문자님의 상황을 고려할 때, 스레드가 예상된 시간 내에 종료되지 않아도 발생할 수 있는 결과에 대비하여 추가적인 예외처리나, 대기 후 재확인하는 로직 등을 고려해 보시는 것이 좋습니다.

질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

박혁진님의 프로필 이미지
박혁진

작성한 질문수

질문하기