cTosMaster 2025. 4. 14. 12:37

✅ 기본 정리

 

1) 직렬 처리 (순차 처리 / Sequential Processing)

  - 하나의 작업이 끝나야 다음 작업 시작. CPU는 한 번에 한 가지 일만 처리함.2) 
2) 병렬 처리 (병렬 프로세싱 / Parallel Processing) 

  - 여러 작업을 동시에 처리. 여러 스레드 또는 프로세서가 동시에 일함.

 

 

✅ 기본 구문

// 동기화 기초 - synchronized 메서드 사용
public class e_SynchronizationBasic {
    public static void main(String[] args) throws InterruptedException {
        //람다식에서 외부 변수를 참조할 때 final 이어야 한다. 
    	final int[] count = {0};

        Runnable incrementTask = () -> {
            for (int i = 0; i < 1000; i++) {
            	// 2개의 스레드가 동시에 count에 접근하여 각각 1씩 증가시키려 할 때,
            	// 실제로는 총 2 증가해야 하지만, 결과가 1만 증가할 수 있음.
            	// 이러한 문제를 **Race Condition(경쟁 상태)**라고 하며,
            	// 이를 방지하기 위해 **synchronized(LOCK)**을 사용하여
            	// 스레드가 순차적으로 접근하도록 만든다.
                synchronized (count) {
                    count[0]++;
                }
            }
        };

        Thread thread1 = new Thread(incrementTask);
        Thread thread2 = new Thread(incrementTask);

        thread1.start();
        thread2.start();
        //메인 스레드가 2개의 일반 스레드가 다 끝날때 까지 기다림. 
        thread1.join();
        thread2.join();

        System.out.println("Final Count: " + count[0]);
    }
}