- Kotlin中没有synchronized、volatile关键字。Kotlin的Any类似于java的Object,但是没有wait()、notify()和notifyAll()方法。
Kotlin通过封装java中的线程类,简化了我们的编码。同时我们可以使用一些特定的注解,使用java中的同步关键字等。
创建线程
在java中通常有两种方式来创建线程:
扩展Thread类或者进行实例化通过构造函数传入一个Runnable。Kotlin中也可以使用这两种方式
- 使用对象表达式创建
object : Thread() {
override fun run() {
println("使用对象表达式创建")
}
}.start()
- 使用Lambda表达式
Thread {
println("通过Lambda表达式")
}.start()
- 使用Kotlin封装的Thread()函数
如下面的方式
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 = ""