我想在伴侣对象中设置一个可变变量,并以静态方式在其他方法中使用它。
class GlobalVariable {
companion object {
private var flag = false
fun modifyFlag(){
flag = setFlagValue() //this method written in other class to assign value to the flag
}
fun getVal(): Boolean = this.flag // this is to get flag value in other methods static way, like GlobalVariable.getVal()
}
}
flag
是我需要的变量,我将在其他方法中调用modifyFlag()
方法,将值设置为标志,然后在需要时使用GlobalVariable.getVal()
。
不确定以这种方式是否是线程安全的。 还有其他方法可以在Kotlin中设置全局变量吗?
答案 0 :(得分:0)
我认为,如果您在JVM上运行Kotlin应用程序,则应尝试此操作。注释@Synchronized
将锁定方法,因此在执行方法时线程将不会访问静态类。
class GlobalVariable {
companion object {
private var mutex = Object()
private var flag = false
@Synchronized fun modifyFlag(){
flag = setFlagValue()
}
@Synchronized fun getVal(): Boolean = this.flag
}
}
您也可以使用同步块,但是,由于官方文档的缘故,并非所有平台都支持任何对象上的同步,因此很快就会从标准库中删除它。
class GlobalVariable {
companion object {
private var mutex = Object()
private var flag = false
private val mutex = Any()
fun modifyFlag(){
synchronized(mutex) {
flag = setFlagValue()
}
}
fun getVal(): Boolean {
synchronized(mutex) {
return flag;
}
}
}
}
在这里,同步块仅允许一个线程同时获取互斥量。拥有互斥量的线程将执行该方法,而不会被其他线程中断或参与竞争