inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

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

run() 메서드 안에 지역변수 sum을 사용한 이유

미해결

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

[질문 내용] SumTask의 run()메서드 안 for문에서 result += i;를 하지 않고 지역변수인 sum을 사용하여 마지막에 result = sum을 하신 이유가 지역변수(sum)는 스택영역, 멤버변수(result)는 힙 영역에 관리되어, 매번 메인 메모리에 있는 result의 값을 변경하는 것이 아닌 cpu 코어의 캐시 메모리를 사용하는 것이 더 빨라서일까요?

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

중복 코드와 유지보수성 사이에서 어떤 기준으로 리팩토링해야 할지 궁금합니다

미해결

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

안녕하세요. 백엔드/서버 개발자로 이직을 준비하고 있는 1년차 SI 개발자입니다. 강의를 들으면서 늘 느끼는 점이 있습니다. 강의에서 보여주시는 코드는 정말 간결하고 효율적이고, 특히 “한 사람이 조금 더 고민해서 코드를 작성하면 다음 사람이 유지보수하기 편하다”는 말씀에 많이 공감하고 있습니다. 저도 실무에서 신규 기능을 추가하거나 기존 기능을 수정할 때 다른 사람이 작성한 코드를 보게 되는데, 그때마다 유지보수하기 쉬운 코드의 중요성을 많이 느끼고 있습니다. 그런데 최근 작업을 하면서 한 가지 의문이 생겼습니다. 어떤 코드에서 분기 조건만 다르고, 마지막에 호출하는 메서드 형식은 완전히 같은 상황이 있었습니다. 예를 들면 if문 안에서 조건에 따라 넘겨주는 값만 다르고, 최종적으로 호출하는 메서드는 동일한 구조였습니다. 처음에는 각 분기 안에서 바로 메서드를 호출하면 코드 흐름이 단순해 보였습니다. if (조건1) { Method(a, b, c); } else if (조건2) { Method(d, e, f); } 하지만 이렇게 작성하면 호출 형식이 계속 반복되고, 나중에 파라미터가 추가되거나 호출 방식이 바뀌면 여러 군데를 수정해야 해서 유지보수성이 떨어질 것 같았습니다. 그래서 조건에 따라 필요한 값만 먼저 변수에 세팅하고, 마지막에 메서드는 한 번만 호출하는 방식이 더 낫다고 생각했습니다. if (조건1) { value1 = a; value2 = b; value3 = c; } else if (조건2) { value1 = d; value2 = e; value3 = f; } Method(value1, value2, value3); 이 방식은 호출부 중복은 줄어들지만, 반대로 코드 길이는 늘어나고 중간 변수가 많아집니다. 또 단순한 if문 하나로 처리할 수 있는 로직을 굳이 변수 세팅 방식으로 바꾸는 게 항상 좋은 선택인지 고민이 됩니다. 결국 궁금한 점은 이것입니다. 분기마다 값만 다르고 호출 형식이 같은 경우, 실무에서는 어떤 기준으로 코드를 작성하는 것이 더 좋은가요? 단순히 코드 줄 수가 짧은 것이 좋은 코드인지, 아니면 조금 길어지더라도 중복 호출을 줄이고 변경 지점을 한 곳으로 모으는 것이 좋은지 아직 실무 경험이 부족해서 판단이 어렵습니다. 이런 상황에서 실무적으로 어떤 기준으로 리팩토링 여부를 판단하면 좋을지 궁금합니다.

  • java
  • 객체지향
  • 동시성
  • multithread
  • thread
탕면이 댓글 1 좋아요 0 조회수 36

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

미해결

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

운영체제 관점의 실제 모니터 명세는 조건변수를 추가할 수 있습니다. synchronized는 자바가 구현한 모니터인데 조건변수의 추가가 불가능해서 생산자 소비자 문제를 해결할 수 없습니다. ReentrantLock은 자체적으로 구현한 락을 사용하지만 그 락의 구현은 실제 조건변수를 추가할 수 있는 모니터의 명세를 따르고 있어 모니터를 구현했다고 할 수 있습니다. 모니터는 CAS를 내부적으로 사용합니다. CAS를 반복문으로 돌리며 바쁜대기를 하거나 Park로 락을 획득하고 반환합니다. 원자적 연산도 CAS를 구현하지만 단순 속도가 synchronized와 ReentrantLock보다 더 빠른 이유는 락의 존재 유무입니다. 혹시 제가 이해한 내용들이 맞을까요?? 현재 81강까지 들었습니다!

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

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

미해결

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

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 안녕하세요. Future 의 cancel 기능에 대해 실험하면서 해결하기 어려운 부분을 만나 질문드립니다. 📋 실험 내용 Callable 의 call 메서드 내부에서 I/O 와 같은 블로킹 작업 진행(or Interrupt 가 되지 않는 작업) Future 의 cancel 진행 스레드 호출 대상은 CancellationException 예외 발생 후 진행 ※ 스레드 풀 의 스레드는 계속 실행 중임을 확인 💥 문제 사항 이런 방식으로 로직이 지속 실행되면 스레드 풀의 스레드는 종료되지 않으면서 고갈되어 가고 결국엔 작업이 쌓이다가 에러를 뱉어내고 오작동 하게 될 것이라 추측됩니다. ❓ 질문 내용 Q. cancel 기능은 Interrupt 를 발생해주면서 작업을 중단합니다. 만약 I/O 작업 처럼 Interrupt 가 먹히지 않는 로직에서는 어떻게 스레드의 실행을 종료하고 스레드 풀로 반납할 수 있을까요? 💻 코드 public class FutureCancelMain { private static boolean mayInterrupIfRunning = true; public static void main(String[] args) { ExecutorService es = Executors.newFixedThreadPool(1); Future<String> future = es.submit(new MyTask()); log("Future.state: " + future.state()); sleep(3000); log("future.cancel(" + mayInterrupIfRunning + ") 호출"); boolean cancelResult = future.cancel(mayInterrupIfRunning); log("cancel(" + mayInterrupIfRunning + ") result: " + cancelResult); try { log("Future result: " + future.get()); } catch (CancellationException e) { log("Future는 이미 취소되었습니다."); } catch (ExecutionException | InterruptedException e) { e.printStackTrace(); } es.close(); } static class MyTask implements Callable<String> { @Override public String call(){ boolean flag = true; // Scanner scanner = new Scanner(System.in); while(flag) { log("무한 작업 중..."); } return "Completed"; } }

  • java
  • 객체지향
  • 동시성
  • multithread
  • thread
  • 지금-베스트
dltkdcksqkqh 댓글 2 좋아요 0 조회수 101

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

미해결

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

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 안녕하세요, 강의 잘 수강하고 있습니다. 17P에 시간의 흐름으로 분석 이라는 그림이 있습니다. 그런데, 마치 스레드 생성 이후에, start()를 통해 실행을 하는 것 처럼 그림이 그려져 있습니다. 'start() 호출 전 3. 호출 후' 라는 프린트가 중간에 끼어있으니 더 그런것 같은데. 제가 알기로 start() 명령어와 동시에 실제 스택이 생성되고 실행되는 것으로 알고 있습니다. 그렇다면 '1 start() 호출 전' 이 main 박스 맨 위로 가고, 스레드 생성이 호출 뒤로 가야 하는거 아닌가 싶습니다.

  • java
  • 객체지향
  • 동시성
  • multithread
  • thread
드림보이즈-DREAMBOYS 댓글 2 좋아요 0 조회수 111

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

미해결

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

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요?예 3. 질문 잘하기 메뉴얼을 읽어보셨나요?예 [질문 내용] 안녕하새요 강사님 수업내용이 너무 알차서 정말 잘 듣고 있습니다 근데 하나 궁금한 점이 생겨서요! 요즘 백엔드는 서버가 여러대인 환경이라 각 서버의 메모리가 공유되지 않아서 자바에서 서로 락을 걸어도 서로의 RAM이 다르기때문에 재고쪽 문제에서 생기는 좋아요 수라던가 재고 같은 문제는 자바 쪽 락보다는 DB의 낙관적락 또는 비관적 락으로 막아주는경우가 많다고 보게 되었는데 또 다른 예시로는 버튼을 따닥 해서 여러 요청이 들어오는 경우도 자바 스레드 제어보다는 DB에서 유니크 키로 막을수 있다고 생각이 드는데 그렇다면 현업에서 ConcurrentHashMap이나 Atomic, synchronized 같은 자바 동시성 기술은 구체적으로 어떤 상황에서 필수적으로 사용되나요? DB 부하를 줄이기 위래 또는 성능 최적화를 위해 멀티스레드를 어떻게 활용하는지도 궁금합니다 !

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

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

미해결

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

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] ReentrantLock에 대한 순서 보장에 대해 궁금증이 생겨 질문을 남깁니다. producerCond에서 대기하고 있던 스레드가 producerCond.signal() 호출로 깨어났을 때 ReentrantLock의 lock을 얻기 위한 대기 큐로 들어가는 것으로 알고 있습니다. 근데 이때 signal() 호출로 깨어난 A 스레드가 lock 대기 큐로 들어갔는데 앞에 이미 스레드 B가 있어서 B가 ReentrantLock의 lock을 얻어버렸다고 가정했을 때 A는 다시 producerCond.await() 호출로 producerCond 스레드 대기 큐에 들어가면 맨 뒤로 이동할 것 같습니다. 근데 저는 B는 await()에 넣고 A를 실행하는 순서로 순서를 보장하고 싶은데 이것도 더 세밀하게 구현을 할 수 있는 것일까요?? 제가 질문에 대한 설명을 잘 못해서.. 혹시 이해가 되신다면.. 답변해주신다면 감사하겠습니다!

  • java
  • 객체지향
  • 동시성
  • multithread
  • thread
닭이된기아 댓글 1 좋아요 0 조회수 114

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

미해결

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

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] synchronized 이전 강의에서 join 을 활용하여 순서를 쓰레드의 순서를 보장하여 실행하는 방법에 대해 배웠습니다. 만약 동시에 같은 값에 대해 접근하는 것이 문제 라고 가정 할 경우 join 을 활용하여 특정 쓰레의 종료 이전 까지 다음 쓰레드 를 시작하는 것을 막는 다면 해결할수 있는 문제가 아닌가 생각합니다. 예를들어 다음과 같이 t1.join() 을 사용하면 t1 의 쓰레드가 종료 이전 까지는 t2 는 대기 상태가 될 것이고 t1 에서 최종 결과가 나오기 전까지는 t2 는 실행하지 못할 것 입니다. public class BankMain { public static void main(String[] args) throws InterruptedException { //BankAccount account = new BankAccountV1(1000); BankAccount account = new BankAccountV1(1000); Thread t1 = new Thread(new WithdrawTask(account, 800), "t1"); Thread t2 = new Thread(new WithdrawTask(account, 800), "t2"); t1.start(); t1.join(); sleep(500); log("t1 state :"+t1.getState()); log("t2 state :"+t2.getState()); t2.start(); //t2.join(); log("최종 잔액 : "+account.getBalance()); } }

  • java
  • 객체지향
  • 동시성
  • multithread
  • thread
정동희 댓글 2 좋아요 0 조회수 127

메모리 가시성 문제 질문

미해결

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

========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 메모리 가시성 문제 가 발생하는 이유는 쓰레드가 공유 된 runFlag 값에 대해 반영이 않되어서 발생하는 문제라고 설명을 해주셨습니다. 예를들어 main 쓰레드에서는 false 를 true 로 변경하였으나 work 쓰레드에서는 해당 값이 변경되었는지 모르기 때문에 계속 동작하는 상태 입니다. 여기서 이해가 않가는 부분이 모든 프로그램은 보조기억 장치에서 실행을 하고 실행에 필요한 변수가 값 들은 모두 ram 과 같은 주 기억 장치에 저장되고 사용되는 걸로 알고 있습니다. 그렇다면 이 과정에서 쓰레드는 캐시메모리가 아닌 주기억 장치에서 값을 읽어서 사용해야 합니다. 지금 과정으로 설명된 것을 이해 하면 주기억 장치 또한 단순히 값을 저장하는 것 뿐이고 실제로는 캐시 메모리에서 한번더 데이터를 저장하고 cpu 는 캐시메모리에 접근하여 데이터를 연산한다고 이해 했습니다. 맞을까요?

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

Future4-이유 질문

미해결

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

1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 안녕하세요. Future를 거치는 SumTaskMainV2에서 future2.get()이 future1.get() 실행 후 task1의 call() 완료를 기다리지 않고 바로 실행되는 것을 콘솔 로그로 확인 가능했는데요. 그렇다면 Future를 거치지 않고 결과를 반환한다 가정할 때, task2가 task1 완료를 기다린 후 수행된다고 나와있는데, "Future는 한 스레드 작업의 future1.get() 실행 후, 다른 스레드의 작업 future2.get()은 future1의 call() 완료까지 기다리지 않는 기능이 있다" 이렇게 이해해도 될까요?

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

오타 제보

미해결

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

4번 스레드 제어와 생명 주기2 PDF의 24페이지 "그리고 스캐줄링 큐 ..." -> "그리고 스케줄링 큐 ..." 7번 고급동기화 PDF의 1페이지 "LockSupport의 대표적인 기능은 가능과 같다 " -> "LockSupport의 대표적인 기능은 다음과 같다 "

  • java
  • 객체지향
  • 동시성
  • multithread
  • thread
donggyu00.oh 댓글 2 좋아요 0 조회수 94

runnable 질문

미해결

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

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 섹션 3에서 runnable를 인터페이스로 불러서 사용할 때 static으로 정의하는 이유가 있나요? 그리고 간간히 왜 이거는 생성자를 받아오지 않고 바로 써야 하는지, 이건 왜 static을 써야 하는지 등등의 의문이 드는데 제가 자바에 대한 이해가 부족해서 그런 걸까요? ㅜㅜ 중급편 내용이 아는 내용이라 건너뛰었는데 중급도 수강하는게 맞을까요?

  • java
  • 객체지향
  • 동시성
  • multithread
  • thread
김지윤 댓글 2 좋아요 0 조회수 126

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

미해결

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

동작원리자체는 동일할까요? 닷넷에서 테스트코드 작성해도 동일할지 궁금합니다.

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

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

미해결

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

멀티스레드 환경에서 메모리 가시성 문제가 발생하는 이유를, CPU 캐시와 메인 메모리 간의 데이터 갱신 시점 차이 때문이라고 이해했습니다. 그렇다면 이 현상은 하드웨어 수준의 문제로 봐야 할까요, 아니면 JVM의 메모리 관리 방식이 영향을 주는 걸까요? 또한, 이런 문제가 자바가 컴파일 언어이기 때문에 발생하는지도 궁금합니다.

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

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

미해결

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

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 데몬스레드의 특징은 이해했는데, 어떨 때 사용이 되는 건지 궁금합니다. 그리고 현업에서도 보통 데몬 스레드를 사용할 일이 있나요?

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

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

미해결

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

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 여기에 질문 내용을 남겨주세요. 안녕하세요! 강의 잘 듣고 있는와중에 Future 관련 내용을 보다가 궁금한 점이 생겨서 질문 남깁니다. cancel() 기능이 필요한 실제 사례가 어떤 것이 있을까요? Future.cancel() 을 통해 실행을 취소시킬 수도 있다는 것은 이해가 됐습니다. 그런데 cancel() 기능이 필요한 실제 사례가 뭐가 있을지가 연상이 잘 안됩니다. 실제로 작업을 수행하다가 취소 처리를 해야하는 경우가 일단 뭐가 있을지 궁금합니다. 그냥 생각이 드는 건 특정 시간 제한이 지나서인데, 이건 get에 시간제한을 둬서 TimeoutException 하는 걸로 충분할 것 같아서요. cancel(false) 로 취소는 하되 과정은 수행하도록 내버려두는 케이스는 어떤 경우를 위해 있는건가요? 아예 interrupt로 취소를 시키는 경우는 막상 예시가 떠오르진 않지만 논리적으로 이해가 갑니다. 어떤 작업을 수행하다가 특정 케이스에서는 필요가 없어져서 취소시킬 수 있겠다 싶습니다. 그런데 cancel(false) 로 취소는 하되 그 과정을 수행하도록 내버려둘 필요가 있나 싶어서요. 어차피 cancel을 하면 true/false 어떤걸 넘겨줘도 get 하면 exception이 발생하면서 결과값을 못 얻는데 수행을 하게 내버려 둘 필요가 없을 것 같은데 어떤 경우를 위해 이렇게 구현이 되어 있는 건지 궁금합니다.

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

synchronized 와 인스턴스의 lock

해결됨

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

[질문 내용] 이 부분을 보면 synchronized 메서드를 호출하려면 인스턴스의 lock이 필요하다고 되어잇는데, 헷갈리는 부분이 있습니다 인스턴스는 메서드 단위가 아닌, 클래스 단위로 존재하는거라고 알고 있는데, 그러면 지금 synchronized 된 메서드 하나를 호출하면 해당 클래스 전체에 Lock 이 발생한다(다른 스레드는 접근하지 못한다)는 개념으로 이해가 되는데 이렇게 동작하는게 맞는건지 궁금합니다

  • java
  • 객체지향
  • 동시성
  • multithread
  • thread
송인효 댓글 2 좋아요 0 조회수 128

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

미해결

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

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] synchronized 키워드를 사용하면 내부적으로 캐시 메모리에 있는 데이터를 메인 메모리에 값을 동기화 시켜주는 걸까요?

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

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

미해결

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

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 여기에 질문 내용을 남겨주세요. 문제와 풀이 정답 코드에서 if (inventoryResult && shippingResult && accountingResult) { log("모든 주문 처리가 성공적으로 완료되었습니다."); } else { log("일부 작업이 실패했습니다."); } else 블록이 실행되는 케이스가 있을까요? future.get() 했을 때의 결과가 모두 true가 나오거나 예외가 터져서 else 블럭은 실행되지 못하는 것으로 이해했습니다. 이렇게 이해한 것이 맞을까요? 예제를 간결하게 하기 위해 예외 처리는 제외하셨다고 적어주셨는데 혹시 이와 관련된 부분일까요?

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

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

미해결

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

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 여기에 질문 내용을 남겨주세요. 안녕하세요! 강의 교안에 따르면 원자적 연산은 '멀티스레드 상황에서 다른 스레드의 간섭 없이 안전하게 처리되는 연산이라는 뜻이다' 라고 하는데요 그렇다면 동일 객체에 대한 원자적 연산들이 여러 CPU 코어에 나뉘어 동시에 실행하려고 해도 동시에 수행할 수 없기 때문에 원자적 연산은 멀티스레드 환경에서 안전하다고 이해해도 될까요? 그렇게 해야 멀티 스레드 상황에서 원자적 연산들이 다른 스레드의 간섭없이 처리될 수 있을 것 같아서요.

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

인기 태그

인프런 TOP Writers

주간 인기글