
자바는 처음부터 멀티스레드를 고려했다단일 코어에서 피어난 자바의 동시성물리적 병렬은 없었지만 동기화는 필수였다자바는 왜 객체마다 모니터를 붙였는가?synchronized는 어떻게 작동하는가?자바의 wait()와 notify()는 어떻게 작동하는가? (조건 동기화의 본질

멀티테스킹(Multitasking)이란?운영체제가 여러 작업(Task, 프로세스)을 거의 동시에 수행하도록 보여주는 기술입니다. 실제로는 CPU가 매우 빠르게 작업을 전환(컨텍스트 스위칭)해서 사람 눈에는 동시에 돌아가는 것처럼 보입니다."여러 작업(Task, 프로세스

스레드를 제대로 이해하려면 자바 메모리 구조를 확실히 이해하고 있어야 합니다.스레드를 시작하기 전에 잠깐 자바 메모리 구조를 복습합니다.메서드 영역(Method Area)프로그램을 실행하는데 필요한 공통 데이터를 관리합니다. 따라서 프로그램의 모든 영역에서 공유합니다.

Thread 클래스란?자바에서 스레드를 생성하고 제어할 수 있게 해주는 클래스main 메서드도 내부적으로 main이라는 이름의 스레드에서 실행스레드 생성 방법HelloRunnable은 Runnable 인터페이스를 구현한 클래스이름("myThread")을 지정하면 로깅이

기본적인 작업 중단 방식 (runFlag)main 스레드에서 runFlag = false로 설정해 중단을 지시합니다.하지만, sleep() 중에는 runFlag를 확인할 수 없어 즉시 반응하지 않습니다.결과적으로 반응이 느려서 실시간 제어에 부적합합니다.문제점: sle

실험 시나리오: runFlag로 스레드 종료 제어main 스레드가 runFlag = false로 변경하면, work 스레드는 이를 감지해 while 문을 탈출해야 합니다.기대한 실행 흐름실제 결과원인: 메모리 가시성(Memory Visibility) 문제각 CPU 코어

멀티스레드에서의 핵심 위험: 동시성 문제여러 스레드가 공유 자원(예: int balance)에 동시에 접근하면 예상치 못한 오류 발생합니다.멀티스레드 환경에서는 반드시 공유 자원에 대한 접근 제어(동기화)가 필요합니다.출금 예제로 보는 동시성 문제💡 코드 요약위 코드

생산자-소비자 문제란?멀티스레드 환경에서 자원을 공유하는 생산자(Producer)와 소비자(Consumer)가 충돌 없이 데이터를 처리해야 하는 동기화 문제입니다.한정된 버퍼(Bounded Buffer)를 매개로 데이터를 주고받으며 발생하는 충돌과 대기 상황을 다룹니다

기존 문제점 요약이전 synchronized + wait/notify 방식에서는 스레드 대기 집합이 하나뿐이었습니다.→ 생산자가 생산자를 깨우거나, 소비자가 소비자를 깨우는 비효율이 발생 했습니다.개선 방향: “생산자는 소비자만 깨우고, 소비자는 생산자만 깨우도록 하자

원자적 연산(Atomic Operation)원자적(Atomic)이란 "더 이상 나눌 수 없는, 중단 없이 완전하게 실행되는 연산"이라는 뜻입니다.전체 연산이 하나의 단위로 실행되며, 중간에 다른 스레드가 개입할 수 없습니다.멀티스레드 환경에서 다른 스레드의 간섭 없이

ArrayList는 스레드 세이프(Thread Safe)할까요?여러 스레드가 동시에 접근할 경우 문제가 없을까요?코드동시 실행 가정 하에 \[A, B] 또는 \[B, A] 출력 예상합니다.add()는 외형상 단순해 보여서 원자적인 연산처럼 보이지만, 실제로는 그렇지 않

문제: 자바에서 직접 Thread를 생성해 사용할 경우, 아래와 같은 3가지 문제가 존재합니다. 1\. 스레드 생성 비용으로 인한 성능 문제스레드 생성은 가볍지 않습니다.메모리 할당 필요: 각 스레드는 독립적인 호출 스택(call stack) 을 가집니다.운영체제 자원

문제 상황서버를 재시작해야 할 때, 진행 중인 작업이 갑자기 중단되면 문제가 발생할 수 있습니다.가장 이상적인 방식: 새로운 작업은 차단하고, 기존 진행 중인 작업은 모두 완료한 뒤 종료합니다.개념 정리: 이런 방식의 종료를 우아한 종료 (Graceful Shutd