투케이2K
62. (java/자바) 동기화 synchronized 순차 작업 - 동기화 synchronized 사용해 for문 순차적 합계 계산 본문
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번이 카운트를 수행하고
순차적으로 시스템이 동작하도록한다
/* =========================== */