V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  fanck0605  ›  全部回复第 1 页 / 共 1 页
回复总数  6
2021-12-02 19:37:59 +08:00
回复了 fanck0605 创建的主题 Java RxJava 的 onNext 访问资源时,否需要考虑线程安全。
看了一下 JVM 的 happens-before 规则,onNext 前后好像都有内存屏障,毕竟一定用了锁或者 volatile 变量操作,所以 onNext 内访问的变量,无需加 volatile ,一定安全的。
2021-11-29 20:24:17 +08:00
回复了 fanck0605 创建的主题 Java RxJava 的 onNext 访问资源时,否需要考虑线程安全。
我编写了这样的一段代码,虽然不加 volatile 结果是正确的,但是我仍然不确定 volatile 是否是必要的

![oQJzh6.md.png]( https://z3.ax1x.com/2021/11/29/oQJzh6.md.png)
2021-11-29 20:13:27 +08:00
回复了 fanck0605 创建的主题 Java RxJava 的 onNext 访问资源时,否需要考虑线程安全。
@shyling
onNext 虽然是顺序调用的, 但需不需要考虑变量不可见 (volatile 关键词) 的问题呢?

毕竟 onNext 并没有保证是在同一条线程运行。
2021-08-20 12:29:25 +08:00
回复了 fanck0605 创建的主题 Vue.js Vue 组件 props 改变时,如何阻止多余的 render
调用它们的父组件
export default defineComponent({
components: {},
data() {
return {
lang: 'Vue'
};
},
render() {
console.log('Lang: ' + this.lang);
return (
<div>
<input v-model={this.lang}/>
<div>Lang: {this.lang}</div>
<BlogPost postLang={this.lang}/>
<BlogPostNotUseProps postLang={this.lang}/>
</div>
);
}
});
@Mulancer 可以告知一下这个使用什么 app 查看的呢
2020-07-08 13:27:07 +08:00
回复了 fanck0605 创建的主题 Kotlin Kotlin 如何检测所有 lateinit 的 field 是否初始化
我也是刚写 Kotlin,比较看中 Kotlin 的对空值的处理,还有协程。

@aabbcc112233
如果使用了可空类型,那么以后的调用都要加 `!!`,虽然可以从代码层面控制这些 成员变量 非空,但是这似乎让代码变得不够优雅了。

@holmesabc @dcalsky
这么写的确可以判断单个 成员变量 ,编译时,成员变量 也是固定的,一个一个判断也不是不可以。
但成员变量很多时,写出来的代码似乎就会很冗长。


现在我是这么写的,不知道有没有优化的余地。
```
class Car {

lateinit var field1: String
lateinit var field2: String
lateinit var field3: String
lateinit var name: String
lateinit var color: String

// 这里还有很多成员变量

companion object {
val memberProperties = Car::class.memberProperties

fun parse(text : String): Car {

val car = Car()

// 这里解析一些文本,并初始化 car 的成员变量
// var car.field1 = xxx
// var car.field2 = xxx
// var car.field3 = xxx


// 检测是否都被初始化
for (memberProperty in memberProperties) {
try {
memberProperty.get(car)
} catch (e: UninitializedPropertyAccessException) {
// 抛出异常,保证外部获得的对象,所有变量都被 initialized
throw Exception("${memberProperty.name} is uninitialized! Failed to parse text: $text")
}
}
return car
}
}
}
```
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3022 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 15ms · UTC 14:44 · PVG 22:44 · LAX 06:44 · JFK 09:44
Developed with CodeLauncher
♥ Do have faith in what you're doing.