반응형

multithread 3

태태개발일지 - 자바 고급 (김영한) CAS 연산

자바 원자적 연산 원자적 연산이란? 하나의 연산이 중간에 끊기지 않고 한 번에 수행되는 것  원자적 연산을 사용하는 이유멀티스레드 환경에서 동시에 여러 스레드가 공유 변수에 접근하면 경합이 발생할 수 있다.이 문제를 해결하기 위해 synchronized 와 같은 키워드로 lock을 걸어서 동기화 할 수 있지만, 락을 사용하면 성능이 저하될 수 있다. ex) 아래는 원자적인 연산이 아니여서 경합이 발생할 수 있는 코드이다.public void use(){if(i==10){}i++;}CAS CAS(Compare-And-Swap) 을 사용해서 동기화 없이(비블로킹, Lock-Free) 원자적 연산을 수행할 수 있도록 설계된 클래스  사용법 import java.util.concurrent.atomic.Atom..

JAVA 2025.03.17

태태개발일지 - java 고급 멀티스레드(김영한)

전 글에 이어서 작성하겠다.전 글을 요약하자면, 생산자와 소비자가 같은 대기공간에 들어가고 랜덤으로 깨어진다는 것이였다. ReentrantLock여기서 사용하는 것이 ReentrantLock 이다. 예시코드 public void awaitMethod() { lock.lock(); try { while (!ready) { // ready가 true가 될 때까지 대기 System.out.println(Thread.currentThread().getName() + " 대기 중..."); condition.await(); // 현재 스레드를 대기 상태로 만든다. } S..

JAVA 2025.03.08

태태개발일지 - java 고급 멀티스레드

생산자 스레드와 소비자 스레드 시뮬레이션가정:1. 생산자는 데이터를 가져와서 queue에 입력을한다.2. 소비자는 데이터를 queue에서 가져와서 제거한다.  기본 코드 예시 public synchronized void produce(int value) throws InterruptedException { while (queue.size() == MAX_SIZE) { System.out.println("Queue is full. Producer is waiting..."); sleep(); // Queue가 꽉 차면 기다림 } queue.offer(value); System.out.println("Produced..

JAVA 2025.03.06
반응형