묻고 답해요
156만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
여러 스레드의 실행 순서 질문 (start 메서드)
섹션3. 여러 스레드 만들기 - [1:40] HelloRunnable 스레드 3개 실행하는 부분 앞서 스레드의 start 메서드를 호출할 때 스레드는 스택 공간을 할당 받고 실행 된다고 이해했습니다.그럼 아래 코드를 실행했을 때 start 메서드를 순서대로 읽어서 순서대로 실행 되어야 하는게 아닌가요?? 왜 각자 동시에 실행 되어서 순서를 보장할 수 없는 것인가요? HelloRunnable runnable = new HelloRunnable(); Thread thread1 = new Thread(runnable); thread1.start(); Thread thread2 = new Thread(runnable); thread2.start(); Thread thread3 = new Thread(runnable); thread3.start();
-
미해결자바 동시성 프로그래밍 [리액티브 프로그래밍 Part.1]
16분 7초 뮤텍스 코드 관련해 질문드립니다.
release(m)에서 마지막에 lock = 0 을 해주어야 acquired(m)에서 해당 lock을 사용할 수 있는거 아닌가요..? 또한 a스레드에 의해 락이 획득된 상태에서, block() 함수를 통해 대기상태로 변하고 > 이후 release(m)를 통해 실행대기 상태로 변한 스레드들은 ( 목적이 critical section의 실행 ) do - while 구문을 통해 critical section을 반복적으로 실행할 수 있도록 되는 건가요?? 실행 대기 상태로 돌아왔을 때 어떻게 다시 락 획득 프로세스를 다시 진행할 수 있는 건지 알고 싶습니다.
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
CAS연산3 강의 중 질문있습니다.
incrementAndGet() 메서드에서, 스레드 두개가 들어가고 동시에 실행 됐을때마지막 스레드가 다시 compareAndSet(getValue, getValue + 1) 이 성공적으로 돌았을때 getValue의 값이 이미 2가 되는것으로 예상되는데결과는 1이 반환이 되고, return getValue + 1;로 인해 결과값이 2가 어떻게 나오는 지 궁금합니다.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
선생님 감성적이시네요 MBTI 가 뭔가요 궁금합니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
스레드 대기 집합에는 대기 목록의 개수 제한이 따로 없나요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]스레드 대기 집합에는 대기 목록의 개수는 제한이 따로 없나요?
-
미해결자바 동시성 프로그래밍 [리액티브 프로그래밍 Part.1]
동기화가 보장된다고 하더라도 스레드간 데이터 불일치가 발생할 수 있지 않나요??
강의 잘 듣고 있습니다.질문 드릴 것이, 동기화가 보장되어서 각 스레드 별로 원자적으로 연산을 한다고 하더라도 CPU 레지스터에서 이루어지는 연산이기 때문에 메모리에 바로 적용되지는 않는거 아닌가요? 동기화 매커니즘과 동시에 atomic 혹은 volatile 을 선언해야 하는 거 아닌가요??
-
해결됨자바 동시성 프로그래밍 [리액티브 프로그래밍 Part.1]
리액티브-part2
안녕하세요 강의내용과는 다른 질문인데요.part1 다음의 part2 강의도 계획중신건가요??만약 part2도 있다면 part2는 어떤 내용애 관한 강의인지 궁금하니다!
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
예제 코드에서의 volatile 사용에 관하여 질문드립니다.
안녕하세요, 영한님.이번 강의 9분 10초쯤에 flag 와 count 변수에 volatile 키워드를 추가하셨는데,저는 flag 변수에만 volatile 키워드를 사용해도 예제 코드가 정상적으로 동작할 것으로 예상했습니다.실제로 flag 변수에만 volatile 키워드를 붙이고 실행해보니 main 스레드에서 가져온 task.count 와 work 스레드에서 가져온 count 의 값이 동일했습니다.또한 volatile 키워드를 모두 사용하지 않았을 때를 기준으로 flag 변수에만 사용했을 때 약 2배, flag 와 count 변수 모두 사용했을 때 약 5배 정도 성능이 저하되는 것을 확인했습니다.그럼에도 불구하고 count 에도 volatile 키워드를 사용하신 이유가 있을까요? 제가 생각하지 못한 예외 상황이 있을까요?
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
LockSupport.unpark(thread) vs Interrupt
Waiting 상태의 쓰레드를 Runnable 상태로 만들기 위해선 두 가지 방법이 있다고 배웠습니다.LockSupport 기능인터럽트 발생2번 방법에 대해서 궁금한 것이 있습니다. 결과적으로 인터럽트를 발생시켜 쓰레드를 대기 상태에서 실행 가능한 상태로 전이시킨다는 것인데 인터럽트 상태가 정상(false)이 아닌 상태가 나오게 되는데 그럼 실무에서 1번 방법을 더 많이 사용하나요?
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
스레드 풀에 대해 질문 있습니다.
톰켓에 있는 스레드 풀도 Executor 인터페이스를 구현해서 생성하는건지 궁금합니다.스프링 부트를 사용한다면 톰켓에서 자체적으로 스레드 풀을 생성 할텐대 여기에 강의에서 배운것처럼 ExecutorService es = Executors.newFixedThreadPool(3); 이런식으로 직접 스레드 풀을 만들어서 사용해도 되는지 궁금합니다.
-
해결됨김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
future.get()에 대해 질문 있습니다.
main 스레드에서 future.get()을 호출하면 결과값이 올때까지 다음 코드라인을 실행할 수 없는 상태가 된다고 보면 될까요?앞서 스레드들은 락 대기 집합, 스레드 대기 집합 같은 곳에서 대기를 했는데요 future.get()을 한다면 main 스레드도 대기를 할곳이 필요해 보이는데 저런 대기 집합 장소가 따로 있는지 궁금합니다.블로킹에 대한 개념을 보면서 동기/비동기, 블로킹/논블로킹에 대한 차이점에 대해 궁금해졌습니다. 구글링을 하면서 자료 조사를 했는데 여전히 헷갈리네요 혹시 간단하게 이 개념들의 차이점에 대해 설명해주실 수 있을까요
-
미해결스프링 배치
step-in-muti-thread 질문
안녕하세요 강의에서 학습하고 디버깅한 바탕으로 제 생각이 맞는지 궁금하여 질문 드립니다. 1. 4개의 스레드 풀이 존재하고 chunkSize=100, pageSize=300을 주었다고 쳤을 때 맨 처음 스레드가 데이터 베이스에서 300개를 조회2. AbstractPagingItemReader의 CopyOnWriteArrayList에 저장하고 이후 다른 스레드들은 해당 Reader를 공유하여 락 메커니즘이 적용된 doRead() 호출하여 list(count++)에서 데이터를 하나씩 가져와 개별 스택 안의 Chunk에 설정한 chunkSize 만큼 저장3. 그 후 process -> write 이렇게 작동하여 단일 스레드가 100개씩 3번 처리를 멀티 스레드를 이용해 마치 한 번 만에 300개 처리가 가능하여 속도를 향상시키는 게 맞을까요?
-
해결됨김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
오타 제보입니다.
섹션 13 - 스레드 풀과 Executor 프레임워크1강의 소스코드의 ExecutorBasicMain.java package thread.executor; import java.util.concurrent.ExecutorService; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; import static thread.executor.ExecutorUtils.*; import static util.MyLogger.log; import static util.ThreadUtils.sleep; public class ExecutorBasicMain { public static void main(String[] args) { ExecutorService es = new ThreadPoolExecutor(2, 2, 0, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<>()); log("== 초기 상태 =="); printState(es); es.execute(new RunnableTask("taskA")); es.execute(new RunnableTask("taskB")); es.execute(new RunnableTask("taskC")); es.execute(new RunnableTask("taskD")); log("== 작업 수행 중 =="); printState(es); sleep(3000); log("== 작업 수행 완료 =="); printState(es); es.close(); log("== showdown 완료 =="); printState(es); } } 다른곳들은 다 고쳐져있는 거 같은데, 이 클래스에만 showdown으로 아직 변경이 안되어있습니다.
-
해결됨MFC Windows 프로그래밍 - 응용
수업자료
수업자료가 외워서 끝내는 네트워크 핵심이론인데, 맞나요?
-
해결됨MFC Windows 프로그래밍 - 응용
수업자료
수업자료가 '외워서 끝내는 네트워크 핵심이론-응용'인데 이거 맞나요?
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
break 부분이 왜 필요한지 헷갈립니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]여기서 catch 부분에 break가 왜 필요한건가요?"q" 를 입력하면 printerThread 에 인터럽트를 걸고 while문의 !Thread.interrupted가 false가 되어서 while문을 탈출하는게 아닌가요?아니면 !Thread.interrupted가 false가 되기 전에 먼저 예외를 잡아서 인터럽트가 true에서 false로 먼저 되어서 !Thread.interrupted가 true가 되는건가요?
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
compareAndSet()에 대해 질문 있습니다.
private static int incrementAndGet(AtomicInteger atomicInteger) { int getValue; boolean result; do { getValue = atomicInteger.get(); log("getValue: " + getValue); result = atomicInteger.compareAndSet(getValue, getValue + 1); log("result: " + result); } while (!result); return getValue + 1; }getValue = atomicInteger.get(); 에서 조회한 값이 compareAndSet() 연산을 할때 바뀌지 않아야 바꿀려고 한 값으로 바꾸고 true를 반환한다고 이해했습니다.궁금한 부분은 getValue = atomicInteger.get(); 여기서 값을 조회하거나 중간에 스레드가 바꾼 값을 조회 한다는걸 compareAndSet()에서 구분을 할 수 있나요?
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
CPU와 스레드간 상호작용에 대해 질문 있습니다.
CPU 코어와 메모리가 동작하는 이미지가 자주 나왔는데요헷갈리는 부분이 있어서 질문 합니다.스레드, 프로세스, 메모리 등 여러 개념들이 존재하지만 CPU와 직접적으로 통신(?) 하는 주체는 스레드라고 이해를 해도 될까요?1번이 맞다면 스레드는 본인이 실행한 코드 한줄 한줄을 CPU로 보내고 CPU는 해당 코드 한줄을 해석하고 그에 따라서 프로세스에 할당된 메모리 영역(힙, 데이터, 코드)이나 스레드에 할당된 메모리 영역(스택)에 접근해서 데이터를 읽거나 저장한다 라고 이해를 해도 될까요?Java의 thread는 OS의 kernel thread와 1:1로 mapping 되는걸로 알고 있는데 그러면 CPU는 kernel thread와 통신 한다고 이해하면 될까요?
-
해결됨MFC Windows 프로그래밍 - 응용
자료 다운로드 관련
안녕하세요 섹션1 (알고 있어야 하는 것들)에서 자료 다운로드가 안되는데 저만 그런건가요?? 확인 부탁 드립니다.
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
Synchronized 락 순서 획득질문
"어떤 순서로 락을 획득하는지는 자바 표준에 정의되어 있지 않다. 따라서 순서를 보장하지 않고, 환경에 따라서 순서가 달라질 수 있다." 라고 설명하셨는데 OS에서 프로세스 스케줄링에 영향을 받지 않는건가요?