1. Synchronized 메서드:
class MyRunnable : Runnable {
private var sharedVariable = 0
// synchronized 메서드
@Synchronized
private fun increment() {
sharedVariable++
}
override fun run() {
for (i in 0 until 10000) {
increment()
}
}
}
2. Synchronized 블록:
class MyRunnable : Runnable {
private val lock = Any()
private var sharedVariable = 0
override fun run() {
for (i in 0 until 10000) {
synchronized(lock) {
sharedVariable++
}
}
}
}
3. ReentrantLock:
import java.util.concurrent.locks.ReentrantLock
class MyRunnable : Runnable {
private val lock = ReentrantLock()
private var sharedVariable = 0
override fun run() {
for (i in 0 until 10000) {
lock.lock()
try {
sharedVariable++
} finally {
lock.unlock()
}
}
}
}
코틀린에서는 @Synchronized 어노테이션을 사용하여 메서드에 동기화를 적용할 수 있습니다.
또한 Java와 동일하게 synchronized 블록을 사용하거나 ReentrantLock 클래스를 활용할 수 있습니다.
'Kotlin > 비동기 프로그래밍' 카테고리의 다른 글
[Kotlin] 코루틴 동기화 방법 (0) | 2023.11.22 |
---|