[关闭]
@runzhliu 2018-04-22T00:19:26.000000Z 字数 590 阅读 4778

Scala volatile 修饰符的使用

jvm volatile scala


参考资料
https://blog.csdn.net/nevasun/article/details/7387881

记录代码块的运行时间,在 Scala 中,会经常用到一个方法:

  1. def benchmark[T](f: => T): T = {
  2. val start = System.nanoTime()
  3. result = f
  4. println(s"time: [ ${System.nanoTime() - start} ]")
  5. result
  6. }

但是在 JVM 中的某些运行时优化技术,可能会去除调用 f 代码块的语句,那么得到的运行时间就不是真正的运行时间了。于是为了避免这种情况,可以把代码块的返回值,赋予名为 resultVolatile 的字段。修改代码如下:

  1. @volatile var result: Any = _
  2. def benchmark[T](f: => T): T = {
  3. val start = System.nanoTime()
  4. result = f
  5. println(s"time: [ ${System.nanoTime() - start} ]")
  6. result
  7. }

volatile 关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更改,比如:操作系统、硬件或者其他线程等。遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注