Notice
Recent Posts
Recent Comments
Link
투케이2K
371. (kotlin/코틀린) @Synchronized fun 사용해 순차 작업 동기화 메소드 선언 및 sum 합계 연산 수행 본문
Kotlin
371. (kotlin/코틀린) @Synchronized fun 사용해 순차 작업 동기화 메소드 선언 및 sum 합계 연산 수행
투케이2K 2023. 8. 10. 07:33[개발 환경 설정]
개발 툴 : AndroidStudio
개발 언어 : Kotlin
[소스 코드]
// -----------------------------------------------------------------------------------------
// TODO [전역 변수]
// -----------------------------------------------------------------------------------------
var sum = 0;
// -----------------------------------------------------------------------------------------
// TODO [액티비티 onCreate]
// -----------------------------------------------------------------------------------------
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
try {
/**
* -----------------------------------
* [설 명]
* -----------------------------------
* 1. 동기화란 ? 순차적으로 작업을 실행하며, 한 시점마다 한 스레드만이 접근 및 실행할 수 있습니다
* (공유자원을 같이 사용 시에 주로 사용)
* -----------------------------------
* 2. 사용이유 ? - 예시로, 1번과 2번 출입 카운트 시스템 기기가 있다고 가정을하고,
* - 1번과 2번에 동시에 손님이 방문을 하면 둘다 관련 add 메소드를 호출해서
* 입장횟수 카운트를 수행하려고 한다.
* - 이럴경우 동시 호출을 수행하면서 카운트값이 잘못 계산될 수 도 있으므로
* - 이러한 방지로 add 메소드를 호출 시 1번이 카운트를 정상완료 후 2번이 카운트를 수행하고
* 순차적으로 시스템이 동작하도록한다
* -----------------------------------
*/
// [작업] : [1]
val sync_1 = Thread(Runnable {
for(i in 1..5 step(1)) {
add("[1] : 작업", i) // [메소드 호출]
}
})
sync_1.start() // [스레드 동작 수행]
// [작업] : [2]
val sync_2 = Thread(Runnable {
for(i in 1..5 step(1)) {
add("[2] : 작업", i) // [메소드 호출]
}
})
sync_2.start() // [스레드 동작 수행]
}
catch (e : Exception) {
S_Log._printStackTrace_(A_Intro@this, "예외 상황 발생", null, e)
}
} // TODO [메인 종료]
// -----------------------------------------------------------------------------------------
// TODO [Synchronized 순차 작업 메소드 선언]
// -----------------------------------------------------------------------------------------
@Synchronized fun add(name: String, value: Int) {
// [전역 변수에 인풋 값 더하기]
sum = sum + value
// [로그 출력]
Log.w(name, "INPUT : " + value.toString() + " / " + "SUM : " + sum.toString())
}
[결과 출력]
W/[1] : 작업: INPUT : 1 / SUM : 1
W/[1] : 작업: INPUT : 2 / SUM : 3
W/[1] : 작업: INPUT : 3 / SUM : 6
W/[1] : 작업: INPUT : 4 / SUM : 10
W/[1] : 작업: INPUT : 5 / SUM : 15
W/[2] : 작업: INPUT : 1 / SUM : 16
W/[2] : 작업: INPUT : 2 / SUM : 18
W/[2] : 작업: INPUT : 3 / SUM : 21
W/[2] : 작업: INPUT : 4 / SUM : 25
W/[2] : 작업: INPUT : 5 / SUM : 30
반응형
'Kotlin' 카테고리의 다른 글
Comments