inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

synchronized 코드 블럭

synchronized lock 획득 질문, 스프링에서 synchronized 질문

해결된 질문

335

영한노게임

작성한 질문수 26

0

  1. 이해 확인에 대한 질문입니다. synchronized는 메서드에서 현재 getBalance()랑 withdraw()에서 선언되었는데, lock은 객체가 가지고있다고 이해하고있습니다. synchronized 메서드가 실행시 lock을 가지고 간다면 synchronized가 선언되지 않은 메서드(동일 클래스)는 자유롭게 실행이 가능한거고,

    만약 synchronized withdraw가 스레드1에서 실행중이라면 스레드2가 synchronized getBalance()시 락을 획득할 수 없어서 대기해야하는 것이 맞나요?

     




    2. 제가 스프링 DB2까지 강의를 듣고있는데, 스프링에서는 실제로 WAS의 스레드 풀에서 기본적으로 많은 스레드를 확보해두고 있는 것으로 알고있습니다. 해당 강의들에서 synchronized를 사용해본 기억은 없는 것 같아요. 기본적으로 스프링은 synchronized가 필요한 부분에 구현이 되어있는 걸까요?(싱글톤 빈에 대한 질문입니다!) 아니면 멀티스레드의 측면도 개발자가 직접 테스트하면서 최적화가 필요할까요?(아마 제 예상으로는 개발자가 직접하는 부분도, 스프링이 해주는 부분도 있을 것 같은데...) 스프링 고급편, 부트편이나 JPA 학습 시점에 알 수 있는 부분일까요?

java 객체지향 동시성 multithread thread

답변 2

1

김영한

안녕하세요. 영한노게임님

1번은 생각하신 내용이 맞습니다.

추천하는 방법은 Thread.sleep() 같은 기능을 통해서 대기하도록 코드를 작성해보시면, 더 확실하게 확인하실 수 있을거에요.

감사합니다.

1

영한노게임

2.에 해당하는 것은 다시 생각해보니 이미 강의에서 배운것 같긴 하네요. 이때동안 작성한 코드를 보면 컬렉션을 사용할 때는 실습의 편의상 단순한 컬렉션 구현체들을 사용했지만 실제로는 Concurrent 컬렉션 구현체를 사용해야 한다고 했던 것이 기억나네요. 또 싱글톤 빈을 구성할 때는 공유자원 문제가 없도록 설계해야하고 문제가 되는 것은 보통 필드에 명시된 것들인데 이것들은 보통 autowired로 주입된 싱글톤 빈 객체일 것 같구요. 메서드들에서 쓰이는 변수들이야 쓰레드에 스택에서 활용되는 내부변수이니 공유자원 문제와는 상관없을 것 같네요.

1

영한노게임

챕터를 마무리하고 다시 씁니다. 필드(멤버변수)에서 사용하는 것이 꼭 autowired로 주입된 싱글톤 객체만 사용하는 것은 아니고 싱글톤 객체에서도 공유변수나 객체의 사용가능성이 존재할 것 같은데 그때는 concurrent 컬렉션을 사용한다던가 해야겠네요. 단순히 int~ 와 같은 기본형을 사용하는 것은 최대한 피해야할 것 같기도 하네요. AtomicInteger를 사용하다던가 해야겠네요. 싱글톤 객체들은 스프링 컨테이너에서 "하나"만 존재하는거고 여러 쓰레드에서 이것을 가져다 쓸테니 적절한 동기화 기법(동기화 강도 - 성능)을 고려하여 사용해야겠네요. 아니면 간단한 변수를 사용해도 그것을 클래스로 다시 덮어서 다루는 메서드들에 동기화 기법을 칠한다던지 해야겠네요.

모니터와 synchronized, ReentrantLock, 원자적연산 CAS관련해서 추가적으로 더 깊게 공부했는데 제가 이해한 것이 맞나요??

0

85

1

Future cancel기능을 사용했지만 interrupt가 발생하지 않을 때 어떻게 처리해야하나요?

0

73

2

2.스레드 생성과 실행 - 17P 그림 문의

0

74

2

자바 동시성 현업에서 사용예시가 궁금합니다

0

136

1

ReentrantLock 동작 원리에 대한 질문입니다.

0

83

1

synchronized 대신 join 을 사용하여 순서를 보장할 경우 해법이 아닌가요?

0

94

2

메모리 가시성 문제 질문

0

72

1

Future4-이유 질문

0

64

1

오타 제보

0

76

2

runnable 질문

0

95

2

자바가 아닌 다른 언어에서도

0

112

1

메모리 가시성 문제가 발생하는 이유

0

125

1

데몬스레드가 어떨 때 사용이 되는지 궁금합니다.

0

78

1

Future.cancel() 취소를 사용하는 예가 궁금합니다.

0

84

1

synchronized 와 인스턴스의 lock

0

91

2

synchronized 키워드만으로 메모리 가시성이 해결되는 이유가 궁급합니다.

0

63

1

[스레드 풀과 Executor 프레임워크1][문제와 풀이] `log("일부 작업이 실패했습니다.");` 실행되는 경우가 있을까요?

0

59

1

원자적 연산이 멀티스레드 상황에서 안전한 이유를 제대로 이해했는지 확인 부탁드립니다

0

67

2

자바 고급 1,2,3편 같이 진행해도 문제없나요

0

77

2

CPU 캐시 때문에도 잔액이 200원이 될 수 있나요?

0

105

2

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

0

69

2

섹션 14. 115번 강의 내용 질문

0

83

2

교안에 있는 7페이지 데이터 영역

0

51

1

Executor 스레드 풀 관리 질문

0

108

2