package CHAPTER12;

// 동기화된 공유 자원 클래스
class Counter1 {
	int count = 0;

	// synchronized 키워드를 통해 스레드 간 안전하게 공유 자원 변경
	public synchronized void increment() {
		count++; // 한 순간에 하나의 스레드만 접근 가능
	}
//	public void increment() {
//	    synchronized (this) {
//	        count++;
//	    }
//	}

}

public class C12_07_SynchronizedTest { // 동기화된 멀티스레드 카운터 예제
	public static void main(String[] args) throws InterruptedException {
		Counter1 counter = new Counter1(); // 공유 객체

		// 첫 번째 스레드 (1000번 증가)
		Thread t1 = new Thread(() -> {
			for (int i = 0; i < 1000; i++)
				counter.increment();
		});

		// 두 번째 스레드 (1000번 증가)
		Thread t2 = new Thread(() -> {
			for (int i = 0; i < 1000; i++)
				counter.increment();
		});

		// 스레드 시작
		t1.start();
		t2.start();

		// 두 스레드가 모두 종료될 때까지 대기
		t1.join();
		t2.join();

		// 정확한 결과 출력
		System.out.println("동기화 후 카운트: " + counter.count); // 항상 2000 출력
	}
}
