14-线程同步
13.4.2 线程同步
Kotlin并没有提供synchronized关键字,但可以使用@Synchronized注解来标明线程同步关系,@Synchronized注解与Java中的synchronized具有相同的效果。代码如下。
@Synchronized fun appendFile(text: String, destFile: String) {
val f = File(destFile)
if (!f.exists()) {
f.createNewFile()
}
f.appendText(text, Charset.defaultCharset())
}
对于同步块,除了可以使用它来修饰函数外,还可以修饰某个参数。代码如下。
fun appendFileSync(text: String, destFile: String) {
…//省略
synchronized(this){
f.appendText(text, Charset.defaultCharset())
}
}
同样地,Kotlin也没有提供volatile关键字,但提供了@Volatile注解,作为一种变量修饰符,volatile可以保证修改的值会立即被更新到主存中。代码如下。
@Volatile private var running = false
fun start() {
running = true
thread(start = true) {
while (running) {
println("thread Still running: ${Thread.currentThread()}")
}
}
}
fun stop() {
running = false
println("thread Stopped: ${Thread.currentThread()}")
}