묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
스레드 대기 집합 질문
여기에서 스래드 대기 집합은 WAITING, TIMED_WAITING, BLOCKED가 보관되는 곳과는 다른 큐를 의미하는게 맞을까요?
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
Blocked 되지 않는 문제
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]쓰레드의 동시성이슈를 syncronized로 해결하였을때로그를 보면, 00:53:11.012 [ t1] 거래 시작: BankAccountV300:53:11.012 [ t2] 거래 시작: BankAccountV300:53:11.020 [ t1] [검증 시작] 출금액: 800, 잔액: 100000:53:11.021 [ t1] [검증 완료] 출금액:800, 잔액: 100000:53:11.489 [ main] t1 state: TIMED_WAITING00:53:11.490 [ main] t2 state: TIMED_WAITING00:53:12.021 [ t1] [출금 완료] 출금액:800, 잔액: 20000:53:12.021 [ t1] 거래 종료00:53:12.021 [ t2] [검증 시작] 출금액: 800, 잔액: 20000:53:12.022 [ t2] [검증 실패]00:53:12.024 [ main] 최종 잔액: 200이런식으로 t1, t2 두 쓰레드중 하나가 blocked 되는 것이 아니라 모두 time_waiting상태로 유지 됩니다.뭔가 느낌으로는 큰 상관은 없을 것 같고, 시스템 환경에 따른 차이인 거 같은데, 혹시나 제가 세팅을 잘못했거나 코드를 잘못 짰을 가능성도 있을까요.## 메인 클래스를 반복해서 실행해보니t1, t2 스레드 모두 time waiting 상태이거나 모두 blocked 상태가 됩니다.
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
원자적 연산을 확실히 알수 있는 방법이 있나요?
i++ 은 1줄이지만 , 2~3개의 cpu 연산이 필요하므로 원자적 연산이 아닙니다.cas 도 상식적으로는 2개 이상의 cpu 연산이 필요한데 cpu 차원에서 1개의 cpu 연산처럼 제공해주기에, 원자적 연산이라고 보는것 같습니다.아래와 같은 경우 원자적연산인데,int count = 3; 그렇다면 아래의 코드는 원자적연산인가? 생각해보면, max 값을 가져오고 그걸 대입해야 하므로 2개 이상 cpu 연산이 필요한것 같은데 확신은 들지 않습니다.int count = max; --그래서... 어디까지가 원자적 연산인지 확실히 알수 있는 방법이나 이와 관련된 스펙문서 등이 있는지 궁금합니다.
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
synchronized가 붙은 메소드를 정말 동시에 접근하는 경우
[질문 내용]안녕하세요. 항상 좋은 강의 감사드리며 질문이 하나 있습니다. 멀티 코어라는 가정하에, synchronized가 붙은 메소드를 정말 동시에 호출하는 경우에는 어떤 스레드가 Lock을 가져가는지 궁금합니다. 정말 동시에 호출되면 두 스레드 모두 Lock을 획득할 수 있는지 조회할 때 획득할 수 있다고 조회가 될 것 같아서요.
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
BankAccountV5 lock.unlock() 작성 여부
BankAccountV5에서 lock.tryLoc()을 사용하는 경우, lock을 얻지 못하면 WAITING하지 않고 바로 return false;하므로 finally { lock.unlock(); }라는 코드가 필요 없을 것이라 생각했는데 이 코드가 꼭 필요한 코드인가요?
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
jvm 구현에 따라 vs java 버전과 구현에 따라
notify / signal 차이점 설명하시면서1) java 버전과 구현에 따라 다르다.2) jvm 구현에 따라 다르다.라고 말씀하시는데, 이 둘간의 정확한 차이가 뭔지 궁금합니다. 제 지식으로는 아래 정도로 보이는데,1) java 라이브러리단에서 구현된 방식(=디컴파일을 통해 내부 로직을 알수있음, 컴파일러 버전에 영향)vs2) jvm 내부에 구현된 방식(=디컴파일해서는 내부 로직 알수없음, 컴파일러가 아닌 런타임에 사용된 java 버전에 영향)로 보면 되는가요? 1) java 구현: 컴파일시 사용된 java 구현체( .java -> .class 변환)2) jvm 구현 : 런타임에 사용되는 jvm 구현체?(.class 구동)
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
오타 제보합니다
Executor 스레드 풀 관리 - 분석 강의에서 정리 - Executor 스레드 풀 관리부분에서 4번 큐도 가득차고, 풀에 최대 생성 가능한 스레드 수도 가득 찼다. 부분을 강의하시다가 '에'를 큐 앞으로 당겨버리셨어여 그래서 에 큐도 가득차고, 풀최대 생성으로 바뀌었습니다
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
오타 제보합니다 ^^
첫번째 PPT 프로세스와 스레드 소개의 3 페이지에 오타가 있어 제보합니다!
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
시분할은 Time Slicing이 아닌가요?
PPT에는 시분할이 Time Sharing이라고 표기되어있는데, '분할'이라는 표현에 'Sharing'이 붙어 뭔가 이상해 검색해보니 Time Slicing이라는 표현이 따로 있는 것 같더라고요. 다른 의도가 있어서 Time Slicing이라고 하신건가요?
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
CAS 와 동기화락 질문 있습니다!
안녕하세요. 영한님 강의 재밌게 잘 보고 있습니다. 몇 가지 궁금한 점이 있습니다 CAS가 버전을 사용하는 Optimistic lock의 개념이고 동기화 락이 Pessimistic lock 방식의 개념이라고 생각해도 될까요??2대 이상의 서버에 로드밸런싱이 적용 된 실제 운영 환경에서도 해당 방식들이 흔히 쓰이는지 궁금합니다~
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
강의소개 질문
안녕하세요. 여기 강의소개 보고 CS 이론이라고 되어 있는데학교에서 배우는 CS theory 랑 같은 맥락의 CS 이론인건가요 ?
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
멀티스레드 app 질문
안녕하세요.스레드 강의를 듣던 중에 만들고 싶은 프로그램이 생겨서 질문 드립니다.스크랩 데몬 프로그램을 만들려고 하는데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에 작성하는게 잘못된건가 싶기도하고 그냥 쌩 자바 프로그램으로 하는게 맞을까요?선생님이시라면 어떻게 구현을 하실지 의견 부탁드립니다.
-
해결됨김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
join() 시 CPU 점유 여부
join()시에 스레드는 CPU를 점유한 상태에서 대기하는 건가요? 아니면 스레드 큐에 들어가있나요?
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
람다식과 스트림에 대해서는 강의가 없을까요!
궁금합니다!
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
언체크 예외를 던질 때
자바 오버라이딩 규칙 중에서 부모보다 같거나 적은 개수의 예외를 던져야 한다고 알고 있습니다. 그런데, Runnable 구현 클래스의 run()에 'throws RuntimeException'을 선언하면 컴파일 오류가 발생하지 않는데 왜 그런건가요? 부모보다 많은 개수의 예외를 던졌으니 컴파일 오류가 발생해야 하는 것 아닌가요..?제가 무엇을 잘못 알고 있는 걸까요?
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
main에서 start 호출 시
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 스택 프레임이 쌓이나요? 쌓이고 바로 삭제되는 건가요?
-
해결됨김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
섹션 3. 교안에 @Override가 빠진 것 같습니다.
섹션 3. 스레드 제어와 생명 주기1[스레드의 생명 주기 - 코드] 파트 첫 번째 코드에서MyRunnable 정적 클래스의 run() 메서드 위에 @Override가 빠진 것 같습니다.물론 코드를 실행하는 점에 있어 문제는 없지만 혹시나 하고 글 남깁니다.
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
자바에서 스레드풀을 생성한다면 어떻게되나요?
질문이 몇가지 더 있어 질문남깁니다.1.톰켓을 실행했을때 톰켓의 스레드풀에 있는 스레드에 의해war의 클래스파일 로직들이 실행된다고하셨는데 만약 자바 로직에서 forkjoinpool같은 스레드풀을 또 생성하면 톰켓의 스레드풀과 별도로 스레드풀이 하나 더 만들어지는건가요? 수업외 질문이라면 죄송합니다 ㅠㅠ
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
자바 스레드관련 질문이 있습니다!
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]여기에 질문 내용을 남겨주세요.예전부터 궁금하던건데 고급강의에서 스레드를 다뤄주셔서 너무 감사드립니다.궁금했던 질문1.war,jar 파일이 tomcat 에서 구동되면 강의에서 설명해준것처럼 tomcat 프로그램을 프로세스가 작동할텐데 동시에 3개의 요청이 tomcat 으로 들어오게 된다면 tomcat 을 돌리고 있는 프로세스는 총 3개의 스레드를 스레드풀에서 가져와서 각 각 요청에 1개씩 스레드를 할당하여 was 가 멀티스레드 처럼 작동되게 되는건가요?2.tomcat 으로 war,jar 파일을 배포하고 운영하면 tomcat 의 스레드가 war,jar 의 소스를 1줄씩 읽는거고 war,jar(자바) 에서는 스레드가 따로 생성되지 않는건가요? (자바에서 멀티스레드 사용하지 않은경우)3.2번이 맞다고 했을때 만약 자바소스에서 멀티스레드를(총3개 스레드사용) 사용했다면 tomcat 의 스레드는 1개일텐데 어떻게 멀티스레드가 되는건가요..? 자바에서 스레드를 2개 더 생성시켜버리는건가요? 궁금합니다 ㅠ4.그리고 자바에서 스레드 숫자를 설정해버리면(4개로 설정) tomcat 에서 4명의 사용자 요청만 동시에 처리할 수 가 있다고 하셨는데자바에서 스레드 숫자를 설정하는순간 톰캣의 스레드풀에서 4개의 스레드만 사용가능해지는건가요..?
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
임포트가 안되요 ㅠ
자바21로 맞췄는데 왜 timeunit을 못가져올까요?>