[kotlin] 코틀린 스크립트에서의 스레드 처리 방법
코틀린은 강력한 스레드 처리 기능을 제공하여 다중 스레드 환경에서 효율적으로 작업을 처리할 수 있도록 도와줍니다. 이번 글에서는 코틀린 스크립트에서의 스레드 처리 방법을 살펴보겠습니다.
1. 스레드 생성과 실행
코틀린에서는 Thread
클래스를 사용하여 스레드를 생성하고, start()
메서드를 통해 스레드를 실행시킬 수 있습니다. 아래는 스레드를 생성하고 실행하는 예제입니다.
import kotlin.concurrent.thread
fun main() {
thread {
// 스레드에서 실행할 작업
println("스레드에서 실행되는 작업")
}
// 메인 스레드에서 실행되는 작업
println("메인 스레드에서 실행되는 작업")
}
실행 결과는 다음과 같습니다.
메인 스레드에서 실행되는 작업
스레드에서 실행되는 작업
2. 스레드 간 통신
코틀린에서는 Thread
클래스 뿐만 아니라 Coroutine
을 사용하여 스레드 간 통신을 할 수도 있습니다. Coroutine
은 비동기 작업을 효율적으로 처리하기 위한 라이브러리로, 코틀린에서 제공하는 suspend
함수와 함께 사용됩니다.
아래는 Coroutine
을 사용하여 스레드 간에 값을 주고받는 예제입니다.
import kotlinx.coroutines.*
fun main() = runBlocking {
val result = GlobalScope.async {
delay(1000)
"Hello, World!"
}
println("작업 진행 중...")
val message = result.await()
println("결과: $message")
}
실행 결과는 다음과 같습니다.
작업 진행 중...
결과: Hello, World!
3. 스레드 안전성 보장
다중 스레드 환경에서는 스레드 안전성을 보장하는 것이 중요합니다. 코틀린에서는 Thread
클래스를 사용할 때 synchronized
키워드를 사용하여 공유 자원에 대한 접근을 동기화할 수 있습니다.
아래는 synchronized
를 사용하여 스레드 안전성을 보장하는 예제입니다.
class Counter {
private var count = 0
@Synchronized
fun increment() {
count++
}
@Synchronized
fun decrement() {
count--
}
fun getCount(): Int {
return count
}
}
fun main() {
val counter = Counter()
thread {
for (i in 1..1000) {
counter.increment()
}
}
thread {
for (i in 1..1000) {
counter.decrement()
}
}
thread {
println("카운트: ${counter.getCount()}")
}
}
실행 결과는 다음과 같습니다.
카운트: 0
마치며
위에서 살펴본 것처럼, 코틀린 스크립트에서도 다양한 스레드 처리 방법을 활용할 수 있습니다. 문제에 맞는 적절한 스레드 처리 방법을 선택하여 다중 스레드 환경에서 안정적인 작업을 수행할 수 있도록 하세요.