투케이2K

62. (java/자바) 동기화 synchronized 순차 작업 - 동기화 synchronized 사용해 for문 순차적 합계 계산 본문

Java

62. (java/자바) 동기화 synchronized 순차 작업 - 동기화 synchronized 사용해 for문 순차적 합계 계산

투케이2K 2021. 1. 4. 17:16
반응형

/* =========================== */

[ 개발 환경 설정 ]

개발 툴 : Eclipse

개발 언어 : Java

/* =========================== */

/* =========================== */

[소스 코드]

 

package AI2;

public class MainActivity10 {
	
	//초기 전역 변수 선언
	static int sum = 0;

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println("[동기화 synchronized 순차 작업 - 동기화 synchronized 사용해 for문 순차적 합계 계산]");
		
		/*[설 명]
		 * 1. 동기화란 ? 순차적으로 작업을 실행하며, 한 시점마다 한 스레드만이 접근 및 실행할 수 있습니다
		 *            (공유자원을 같이 사용 시에 주로 사용)
		 * 2. 사용이유 ? - 예시로, 1번과 2번 출입 카운트 시스템 기기가 있다고 가정을하고,
		 *            - 1번과 2번에 동시에 손님이 방문을 하면 둘다 관련 add 메소드를 호출해서 
		 *              입장횟수 카운트를 수행하려고 한다. 
		 *            - 이럴경우 동시 호출을 수행하면서 카운트값이 잘못 계산될 수 도 있으므로
		 *            - 이러한 방지로 add 메소드를 호출 시 1번이 카운트를 정상완료 후 2번이 카운트를 수행하고 
		 *              순차적으로 시스템이 동작하도록한다  
		 */
		
		//익명 one 스레드 작업 생성 및 실행
		Thread one = new Thread() {
			@Override
			public void run() {
				for(int i=1; i<=5; i++) {
					add("one",i); //메소드 호출
				}
			}
		};
		one.start();
		
		//익명 two 스레드 작업 생성 및 실행
		Thread two = new Thread() {
			@Override
			public void run() {
				for(int i=1; i<=5; i++) {
					add("two",i); //메소드 호출
				}
			}
		};
		two.start();
		
	}//메인 종료
	
	//동기화 synchronized 메소드를 선언해준다
	public static synchronized void add(String name, int data) {		
		sum = sum+data; //합계를 더한다
		System.out.println(name+"-작업 "+" / "+"값-"+data+" / "+"합계-"+sum);
	}	

}//클래스 종료

/* =========================== */

[결과 출력]

[동기화 synchronized 순차 작업 - 동기화 synchronized 사용해 for문 순차적 합계 계산]

one-작업 / 값-1 / 합계-1

one-작업 / 값-2 / 합계-3

two-작업 / 값-1 / 합계-4

one-작업 / 값-3 / 합계-7

one-작업 / 값-4 / 합계-11

one-작업 / 값-5 / 합계-16

two-작업 / 값-2 / 합계-18

two-작업 / 값-3 / 합계-21

two-작업 / 값-4 / 합계-25

two-작업 / 값-5 / 합계-30

/* =========================== */

/* =========================== */

[요약 설명]

* 1. 동기화란 ? 순차적으로 작업을 실행하며, 한 시점마다 한 스레드만이 접근 및 실행할 수 있습니다

                    (공유자원을 같이 사용 시에 주로 사용)

* 2. 사용이유 ? - 예시로, 1번과 2번 출입 카운트 시스템 기기가 있다고 가정을하고,

                    - 1번과 2번에 동시에 손님이 방문을 하면 둘다 관련 add 메소드를 호출해서

                      입장횟수 카운트를 수행하려고 한다.

                    - 이럴경우 동시 호출을 수행하면서 카운트값이 잘못 계산될 수 도 있으므로

                    - 이러한 방지로 add 메소드를 호출 시 1번이 카운트를 정상완료 후 2번이 카운트를 수행하고

                      순차적으로 시스템이 동작하도록한다

/* =========================== */

반응형
Comments