java.util.concurrent

java 5에서 추가된 패키지로, 동기화가 필요한 상황에서 사용할 수 있는 다양한 유틸리티 클래스들을 제공한다.

java.util.concurrent.locks

locks 패키지엔 상호 배제를 위한 Lock API가 정의되어 있다. synchronized를 더욱 유연하고 정교하게 처리하기 위해 사용하기 위해 만들어 진것이며, 대체하는 목적을 가지진 않는다.

Interface

Impl

간단 예제

class SharedData {
    private var value: Int =0

    fun increase() {
        value += 1
    }

    fun print() = println(value)
}

class Test (private val sharedData: SharedData): Runnable {
    override fun run() {
        for (i in 1..100) sharedData.increase()

        sharedData.print()
    }
}

fun main() {
    val sharedData = SharedData()

    for (i in 1..10) {

        Thread(Test(sharedData)).start()
    }
}

스크린샷 2022-01-04 오전 9.21.40.png

락을 사용하지 않으면 여러 쓰레드에서 동시 접근하기에 번호가 뒤죽박죽이다.