java 5에서 추가된 패키지로, 동기화가 필요한 상황에서 사용할 수 있는 다양한 유틸리티 클래스들을 제공한다.
locks 패키지엔 상호 배제를 위한 Lock API가 정의되어 있다. synchronized를 더욱 유연하고 정교하게 처리하기 위해 사용하기 위해 만들어 진것이며, 대체하는 목적을 가지진 않는다.
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()
}
}

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