volatile 개념 다중 스레드 환경에서 변수의 가시성과 순서에 대한 동기화를 제어하는 데 사용됩니다. 가시성 보장 스레드 A가 변수를 수정하고 스레드 B가 해당 변수를 읽을 때, 스레드 B가 스레드 A의 수정 내용을 정확하게 볼 수 있어야 합니다. volatile 키워드를 사용하면 캐시를 사용하지 않고 변수의 값을 항상 메인 메모리에서 읽고 쓰도록 보장하므로 다른 스레드에 대한 가시성을 보장합니다. 순서 보장 volatile 키워드를 사용하면 변수의 변경 순서가 항상 일관적으로 유지됩니다. 즉, 변수의 변경이 항상 이전 변경에 따라 발생하고, 이후 변경이 이전 변경에 따라 발생합니다. 이를 통해 변수의 수정 순서가 잘못된 결과를 초래하는 문제를 방지할 수 있습니다. public class Exampl..
synchronized method 해당 메서드를 호출하는 객체에 락을 사용하여 동기화됩니다. 이렇게 하면 해당 객체에 대해 하나의 스레드만 메서드를 실행할 수 있습니다. public class SynchronizedClass { public synchronized void start(String threadName) { System.out.println(threadName + " lock"); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(threadName + " unlock"); } } 인스턴스가 1개인 경우 public class Main { public sta..
synchronized 키워드 synchronized 키워드는 자바 언어에서 락(Lock)을 사용하기 위한 키워드입니다. 특정 메서드 또는 코드 블록을 synchronized로 선언하면, 해당 메서드 또는 코드 블록을 한 번에 하나의 스레드만 접근할 수 있도록 합니다. synchronized 키워드 예시 public class Example { private int count = 0; public synchronized void increment() { count++; } public synchronized int getCount() { return count; } } 이러한 동기화 방식은 메서드나 코드 블록 전체를 동기화시킴으로써, 동시에 여러 스레드가 해당 코드에 접근하지 못하게 합니다. 락(Lock..
공유 자원의 개념 공유 자원은 다수의 스레드나 프로세스가 접근하고 수정할 수 있는 데이터나 자원을 가리킵니다. 이러한 공유 자원은 동시에 여러 스레드나 프로세스가 접근할 수 있으므로 제대로 관리되지 않으면 예측할 수 없는 결과를 초래할 수 있습니다. 경쟁 상태의 개념 경쟁 상태는 여러 스레드나 프로세스가 공유 자원에 대해 동시에 접근하고 수정할 때 발생하는 문제입니다. 경쟁 상태가 발생하면 데이터의 일관성이 해치는 현상이 나타날 수 있습니다. 임계 영역의 개념 임계 영역은 다중 스레드 환경에서 공유 자원에 접근하는 부분으로, 동시에 여러 스레드가 접근해서는 안 되는 코드 영역을 가리킵니다. 경쟁 상태 예 스레드 A와 스레드 B가 동시에 공유 자원에 접근하고 수정하는 경우. 스레드 A가 공유 자원을 수정하..