当前位置:嗨网首页>书籍在线阅读

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()}")
}