inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

173만명의 커뮤니티!! 함께 토론해봐요.

6. synchronized 문제 1 log출력

미해결

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

public static void main(String[] args) throws InterruptedException { Counter counter = new Counter(); Runnable task = new Runnable() { @Override public void run() { for (int i = 0; i < 10000; i++) { counter.increment(); log(counter.getCount()); // 로그 출력 추가!!!!!!!!!!!!!!! } } }; Thread thread1 = new Thread(task); Thread thread2 = new Thread(task); thread1.start(); thread2.start(); thread1.join(); thread2.join(); log(counter.getCount()); } static class Counter { private int count; public void increment() { count++; } public int getCount() { return count; } } 문제를 푸는 도중 count의 값을 확인해보고 싶어서 MyLogger.log(counter.getCount());를 호출했더니 문제 없이 20000이 계속 출력됩니다. synchronized를 사용하지 않아서 여전히 동시성 문제는 발생할텐데 어떻게 20000이라는 값이 나오게 되는지 궁금합니다!!

  • java
  • 객체지향
  • 동시성
  • multithread
  • thread
권정익 댓글 1 좋아요 1 조회수 208

Runnable 질문

미해결

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

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] https://javatrainingschool.com/multithreading/thread-lifecycle/ 위 링크에서는 Runnable과 Running 상태를 분리하는데 혹시 두개의 차이가 있나요?

  • java
  • 객체지향
  • 동시성
  • multithread
  • thread
공부만이살길 댓글 1 좋아요 1 조회수 284

스레드 대기 집합 질문

미해결

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

여기에서 스래드 대기 집합은 WAITING, TIMED_WAITING, BLOCKED가 보관되는 곳과는 다른 큐를 의미하는게 맞을까요?

  • java
  • 객체지향
  • 동시성
  • multithread
  • thread
도토리 댓글 1 좋아요 0 조회수 310

Blocked 되지 않는 문제

미해결

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

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요. 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 상태가 됩니다.

  • java
  • 객체지향
  • 동시성
  • multithread
  • thread
bongchin 댓글 1 좋아요 0 조회수 309

원자적 연산을 확실히 알수 있는 방법이 있나요?

미해결

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

i++ 은 1줄이지만 , 2~3개의 cpu 연산이 필요하므로 원자적 연산이 아닙니다. cas 도 상식적으로는 2개 이상의 cpu 연산이 필요한데 cpu 차원에서 1개의 cpu 연산처럼 제공해주기에, 원자적 연산이라고 보는것 같습니다. 아래와 같은 경우 원자적연산인데, int count = 3; 그렇다면 아래의 코드는 원자적연산인가? 생각해보면, max 값을 가져오고 그걸 대입해야 하므로 2개 이상 cpu 연산이 필요한것 같은데 확신은 들지 않습니다. int count = max; -- 그래서... 어디까지가 원자적 연산인지 확실히 알수 있는 방법이나 이와 관련된 스펙문서 등이 있는지 궁금합니다.

  • java
  • 객체지향
  • 동시성
  • multithread
  • thread
void 댓글 1 좋아요 1 조회수 304

synchronized가 붙은 메소드를 정말 동시에 접근하는 경우

미해결

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

[질문 내용] 안녕하세요. 항상 좋은 강의 감사드리며 질문이 하나 있습니다. 멀티 코어라는 가정하에, synchronized가 붙은 메소드를 정말 동시에 호출하는 경우에는 어떤 스레드가 Lock을 가져가는지 궁금합니다. 정말 동시에 호출되면 두 스레드 모두 Lock을 획득할 수 있는지 조회할 때 획득할 수 있다고 조회가 될 것 같아서요.

  • java
  • 객체지향
  • 동시성
  • multithread
  • thread
원종민 댓글 1 좋아요 5 조회수 385

BankAccountV5 lock.unlock() 작성 여부

미해결

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

BankAccountV5에서 lock.tryLoc()을 사용하는 경우, lock을 얻지 못하면 WAITING하지 않고 바로 return false;하므로 finally { lock.unlock(); }라는 코드가 필요 없을 것이라 생각했는데 이 코드가 꼭 필요한 코드인가요?

  • java
  • 객체지향
  • 동시성
  • multithread
  • thread
도토리 댓글 1 좋아요 0 조회수 290

jvm 구현에 따라 vs java 버전과 구현에 따라

미해결

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

notify / signal 차이점 설명하시면서 1) java 버전과 구현에 따라 다르다. 2) jvm 구현에 따라 다르다. 라고 말씀하시는데, 이 둘간의 정확한 차이가 뭔지 궁금합니다. 제 지식으로는 아래 정도로 보이는데, 1) java 라이브러리단에서 구현된 방식(=디컴파일을 통해 내부 로직을 알수있음, 컴파일러 버전에 영향) vs 2) jvm 내부에 구현된 방식(=디컴파일해서는 내부 로직 알수없음, 컴파일러가 아닌 런타임에 사용된 java 버전에 영향) 로 보면 되는가요? 1) java 구현: 컴파일시 사용된 java 구현체( .java -> .class 변환) 2) jvm 구현 : 런타임에 사용되는 jvm 구현체?(.class 구동)

  • java
  • 객체지향
  • 동시성
  • multithread
  • thread
void 댓글 1 좋아요 0 조회수 316

오타 제보합니다

미해결

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

Executor 스레드 풀 관리 - 분석 강의에서 정리 - Executor 스레드 풀 관리부분에서 4번 큐도 가득차고, 풀에 최대 생성 가능한 스레드 수도 가득 찼다. 부분을 강의하시다가 '에'를 큐 앞으로 당겨버리셨어여 그래서 에 큐도 가득차고, 풀최대 생성으로 바뀌었습니다

  • java
  • 객체지향
  • 동시성
  • multithread
  • thread
bonjeong08 댓글 1 좋아요 0 조회수 221

오타 제보합니다 ^^

미해결

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

첫번째 PPT 프로세스와 스레드 소개의 3 페이지에 오타가 있어 제보합니다!

  • java
  • 객체지향
  • 동시성
  • multithread
  • thread
Jaesang Yoon 댓글 2 좋아요 0 조회수 189

시분할은 Time Slicing이 아닌가요?

미해결

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

PPT에는 시분할이 Time Sharing이라고 표기되어있는데, '분할'이라는 표현에 'Sharing'이 붙어 뭔가 이상해 검색해보니 Time Slicing이라는 표현이 따로 있는 것 같더라고요. 다른 의도가 있어서 Time Slicing이라고 하신건가요?

  • java
  • 객체지향
  • 동시성
  • multithread
  • thread
Jaesang Yoon 댓글 2 좋아요 0 조회수 464

CAS 와 동기화락 질문 있습니다!

미해결

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

안녕하세요. 영한님 강의 재밌게 잘 보고 있습니다. 몇 가지 궁금한 점이 있습니다 CAS가 버전을 사용하는 Optimistic lock의 개념이고 동기화 락이 Pessimistic lock 방식의 개념이라고 생각해도 될까요?? 2대 이상의 서버에 로드밸런싱이 적용 된 실제 운영 환경에서도 해당 방식들이 흔히 쓰이는지 궁금합니다~

  • java
  • 객체지향
  • 동시성
  • multithread
  • thread
오랜만에 외출 댓글 1 좋아요 1 조회수 330

강의소개 질문

미해결

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

안녕하세요. 여기 강의소개 보고 CS 이론이라고 되어 있는데 학교에서 배우는 CS theory 랑 같은 맥락의 CS 이론인건가요 ?

  • java
  • 객체지향
  • 동시성
  • multithread
  • thread
ghuhan18 댓글 1 좋아요 0 조회수 346

멀티스레드 app 질문

미해결

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

안녕하세요. 스레드 강의를 듣던 중에 만들고 싶은 프로그램이 생겨서 질문 드립니다. 스크랩 데몬 프로그램을 만들려고 하는데 DB에서 url 리스트를 조회하고 리스트를 스레드 갯수만큼 분할한 뒤 멀티 스레드를 활용해서 각 스레드에서 스크랩을 하고 DB에 저장 한 뒤 잠시 sleep 위를 무한 반복하는 역할을 합니다. lombok, logging, dev, prod.yml config 등 springboot의 편리함을 사용하고 싶고 gradle을 활용하여 멀티 모듈로 작성할 계획인데 (DAC: JPA를 사용하는 역할은 따로 분리, infra mailling 등 분리) spring-boot-starter만 web 없이 사용해서 구현하려고 했더니 마땅히 작성할 위치가 보이지 않아 일단 ApplicationRunner를 구현하고 작성하였는데 문제는 build 시에 ApplicationRunner를 springboot가 실행하여서 무한 반복에 빠져서 빌드가 완료가 안됩니다. 이를 환경변 수 등을 이용해서 피할 수는 있겠으나 이러다보니 springboot에 작성하는게 잘못된건가 싶기도하고 그냥 쌩 자바 프로그램으로 하는게 맞을까요? 선생님이시라면 어떻게 구현을 하실지 의견 부탁드립니다.

  • java
  • 객체지향
  • 동시성
  • multithread
  • thread
박준형 댓글 1 좋아요 0 조회수 211

join() 시 CPU 점유 여부

해결됨

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

join()시에 스레드는 CPU를 점유한 상태에서 대기하는 건가요? 아니면 스레드 큐에 들어가있나요?

  • java
  • 객체지향
  • 동시성
  • multithread
  • thread
도토리 댓글 1 좋아요 1 조회수 257

언체크 예외를 던질 때

미해결

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

자바 오버라이딩 규칙 중에서 부모보다 같거나 적은 개수의 예외를 던져야 한다고 알고 있습니다. 그런데, Runnable 구현 클래스의 run()에 'throws RuntimeException'을 선언하면 컴파일 오류가 발생하지 않는데 왜 그런건가요? 부모보다 많은 개수의 예외를 던졌으니 컴파일 오류가 발생해야 하는 것 아닌가요..? 제가 무엇을 잘못 알고 있는 걸까요?

  • java
  • 객체지향
  • 동시성
  • multithread
  • thread
도토리 댓글 2 좋아요 1 조회수 424

main에서 start 호출 시

미해결

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

public class HelloThreadMain { public static void main(String[] args) { System.out.println(Thread.currentThread().getName() + ": main() start"); HelloThread helloThread = new HelloThread(); System.out.println(Thread.currentThread().getName() + ": start() 호출 전"); helloThread.start(); System.out.println(Thread.currentThread().getName() + ": start() 호출 후"); System.out.println(Thread.currentThread().getName() + ": main() end"); } } 개인적으로 궁금한 부분이 있는데요. main에서 start를 호출할 때 main 스택 프레임 위에 start 스택 프레임이 쌓이나요? 쌓이고 바로 삭제되는 건가요?

  • java
  • 객체지향
  • 동시성
  • multithread
  • thread
도토리 댓글 1 좋아요 0 조회수 287

섹션 3. 교안에 @Override가 빠진 것 같습니다.

해결됨

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

섹션 3. 스레드 제어와 생명 주기1 [스레드의 생명 주기 - 코드] 파트 첫 번째 코드에서 MyRunnable 정적 클래스의 run() 메서드 위에 @Override가 빠진 것 같습니다. 물론 코드를 실행하는 점에 있어 문제는 없지만 혹시나 하고 글 남깁니다.

  • java
  • 객체지향
  • 동시성
  • multithread
  • thread
형씌 댓글 1 좋아요 1 조회수 233

자바에서 스레드풀을 생성한다면 어떻게되나요?

미해결

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

질문이 몇가지 더 있어 질문남깁니다. 1.톰켓을 실행했을때 톰켓의 스레드풀에 있는 스레드에 의해 war의 클래스파일 로직들이 실행된다고하셨는데 만약 자바 로직에서 forkjoinpool같은 스레드풀을 또 생성하면 톰켓의 스레드풀과 별도로 스레드풀이 하나 더 만들어지는건가요? 수업외 질문이라면 죄송합니다 ㅠㅠ

  • java
  • 객체지향
  • 동시성
  • multithread
  • thread
backendman 댓글 1 좋아요 1 조회수 329

인기 태그

인프런 TOP Writers

주간 인기글