원자적 연산이란? 원자적 연산이란 연산이 더 이상 나눌 수 없는 단위로 수행된 것을 의미한다. 즉 멀티스레드 상황에서 다른 스레드의 간섭 없이 안전하게 처리되는 연산이다.// 원자적 연산인 경우int i = 0;// 원자적 연산이 아닌 경우i = i + 1;i++; 위의 연산을 보면 i = 0은 둘로 쪼갤 수 없는 원자적 연산이다. 그에 반해 i = i + 1과 i++은 원자적 연산이 아니다. 왜냐하면 이 연산은 아래와 같이 나누어 실행되기 때문이다.i의 값을 읽는다. i의 값은 0이다.읽은 0에 1을 더해서 1을 만든다.더한 1을 i 변수에 대입한다. 원자적 연산이 아닌 경우 멀티스레드 환경에서 안전하게 연산을 수행할려면 임계 영역을 만들어야 할 경우 synchronized 블록이나 Lock 등을 사용..
yield() 메서드란? yield() 메서드는 현재 실행 중인 스레드가 CPU를 양보하여 다른 스레드가 실행될 수 있도록 하는 메서드이다. 메서드를 호출한 스레드는 RUNNABLE 상태를 유지하면서 CPU를 양보하기 때문에 만약 양보할 스레드가 없다면 스레드가 다시 실행될 수 있다. yield() 예제public class YieldMethod { public static void main(String[] args) throws InterruptedException { Printer printer = new Printer(); Thread printerThread = new Thread(printer, "printer"); printerThread.start(..
버퍼 이란? 버퍼(Buffer) 메모리는 데이터를 일시적으로 저장하는 메모리 공간이다. 주로 데이터의 입출력 속도 차이를 조정하고, 효율적인 데이터 처리를 돕기 위해 사용된다. 버퍼 메모리가 필요한 이유?속도 차이 조정: CPU, RAM, 저장 장치(SSD, HDD)의 데이터 처리 속도가 다르기 때문에 버퍼를 사용하여 빠른 장치와 느린 장치 간의 속도 차이를 완충할 수 있다.데이터 손실 방지: 버퍼를 사용하면 데이터를 안정적으로 저장하고 순차적으로 전달할 수 있기 때문에 버퍼가 없을 경우 데이터가 빠르게 도착하거나 늦게 도착할 수 있어서 손실이 발생할 수 있는데 이를 방지한다.일괄 처리 가능: 프린터의 예를 들자면 프린터는 한 글자씩 출력하는 것이 아니라, 일정량의 데이터를 버퍼에 저장한 후 한꺼번에 ..
Object 객체의 wait(), notify(), notifyAll() 메서드란? sychronized를 사용할 때 락을 획득하지 못하여 무한 대기하는 경우에 Object 메서드 내 wait(), notify(), notifyAll()를 활용하여 해결할 수 있다.wait(): 현재 스레드가 가진 락을 반납하고 대기(WAITING)한다. 현재 스레드가 sychronized 블록이나 메서드에서 락을 소유하고 있을 때만 호출할 수 있다. 호출 후 다른 스레드가 락을 획득할 수 있고, 대기 상태로 전환된 스레드는 다른 스레드가 notify(), notifyAll()을 호출할 때까지 대기 상태를 유지한다.notify(): 대기 중인 스레드 중 하나를 깨운다. notify()는 sychronized 블록이나 메서..
