본문 바로가기
Kotlin/비동기 프로그래밍

[Kotlin] 스레드간 동기화 방법

by startSW 2023. 11. 22.

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