Kotlinマルチスレッドプログラミング
2034 ワード
スレッドの作成
Javaでは通常、スレッドを作成するには、Threadクラスを拡張するか、構造関数を介してRunnableにインスタンス化するかの2つの方法があります.Kotlinではこの2つの方法も使用できます
object : Thread() {
override fun run() {
println(" ")
}
}.start()
Thread {
println(" Lambda ")
}.start()
val t = Thread() {
println("thread")
}
t.isDaemon = false
t.name = "tThread"
t.priority = 3
t.start()
Kotlinでは上のコードの方式を簡略化しました
val t = thread(start = true, isDaemon = false, name = "thread", priority = 3) {
println("thread")
}
実はKotlinはThreadを抽象的にカプセル化しています
public fun thread(
start: Boolean = true,
isDaemon: Boolean = false,
contextClassLoader: ClassLoader? = null,
name: String? = null,
priority: Int = -1,
block: () -> Unit
): Thread {
val thread = object : Thread() {
public override fun run() {
block()
}
}
if (isDaemon)
thread.isDaemon = true
if (priority > 0)
thread.priority = priority
if (name != null)
thread.name = name
if (contextClassLoader != null)
thread.contextClassLoader = contextClassLoader
if (start)
thread.start()
return thread
}
同期メソッドとブロック
synchronizedはKotlinキーワードではなく、@Synchronized注記に置き換えられます.
@Synchronized
fun appendText() {
}
可変フィールド
Kotlinにはvolatileキーワードはありませんが@Volatile注記があり、JVMにはVolatileとマークされます
@Volatile
private var s = ""