프로그래밍/Java

[자바/java] Thread 동기화 synchronized

Rolen 2023. 2. 4. 15:53

같은 자원에 동시에 접근하여 섞이는 것을 방지하기 위하여 동기화를 한다.

package synchroPrint;

/*class Printer {	// 동기화 블록 사용
	void print(int arr[]) {
		synchronized(this) {
			for (int i = 0; i < arr.length; i++) {
				System.out.print(arr[i] + " ");
				try {
					Thread.sleep(100);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
		}
	}
}*/

class Printer {		// 동기화 메소드 사용
	synchronized void print(int arr[]) {
		for (int i = 0; i < arr.length; i++) {
			System.out.print(arr[i] + " ");
			try {
				Thread.sleep(100);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
}


class MyThread1 extends Thread {
	Printer prn;
	int myArr[] = {10, 20, 30, 40, 50};
	
	MyThread1(Printer prn) {
		this.prn = prn;
	}
	public void run() {
		prn.print(myArr);
	}
}

class MyThread2 extends Thread {
	Printer prn;
	int myArr[] = {1, 2, 3, 4, 5};
	
	MyThread2(Printer prn) {
		this.prn = prn;
	}
	public void run() {
		prn.print(myArr);
	}
}

public class SynchroPrint {

	public static void main(String[] args) {
		Printer obj = new Printer();
		MyThread1 t1 = new MyThread1(obj);
		MyThread2 t2 = new MyThread2(obj);
		t1.start();
		t2.start();
	}

}
728x90