怎么设计一个线程安全的类?有什么原则吗?比如 vector?

2019 年 5 月 28 日
 FelixLiu

vector 基本每个方法都保证了原子性,但是组合起来也不一定。

4516 次点击
所在节点    程序员
26 条回复
Mithrandir
2019 年 5 月 28 日
来把大锁就好了
Mithrandir
2019 年 5 月 28 日
如果是无锁数据结构,那比较复杂
FelixLiu
2019 年 5 月 28 日
@Mithrandir 来把大锁的话,还不如就设计成单线程模式,效率还是要提高一点的。。。
mooncakejs
2019 年 5 月 28 日
『大锁』
读写锁
分区锁
COW+Immutable
FelixLiu
2019 年 5 月 28 日
@mooncakejs 我意思是有什么指导性原则吗?比如共享成员变量加锁之类的,实现可能很多种,事件、临界区、信号量。。。
wysnylc
2019 年 5 月 28 日
首先 vector 只保证可见性不保证原子性,其次最安全的线程安全就是单线程参考实例 redis
解决并发的最终方案只有队列
tt67wq
2019 年 5 月 28 日
原子性的实现参考数据库事务的实现方法
skypyb
2019 年 5 月 28 日
线程最安全的就是不可变对象啦,你所有的属性包括类都是 final,就不用担心这问题了
FelixLiu
2019 年 5 月 28 日
@wysnylc 阔以,道路千万条,安全第一条
FelixLiu
2019 年 5 月 28 日
@skypyb 不可变对象。。。做不到哇
FelixLiu
2019 年 5 月 28 日
@tt67wq 我研究下
CoderSun
2019 年 5 月 28 日
java 里临界区,锁,volatile,信号量,根据业务选择合适的。
BCy66drFCvk1Ou87
2019 年 5 月 28 日
自从用上了 go 语言的 goroutine,再也不用搞 java 线程中复杂的锁
jimrok
2019 年 5 月 28 日
干活的线程不要共享数据,干完了把数据交出去。
sagaxu
2019 年 5 月 28 日
熟读 Java 并发编程实践这本书
luozic
2019 年 5 月 28 日
去抄 jdk Dou 大佬的代码。
momocraft
2019 年 5 月 28 日
不能证明安全就是不安全
自己写得越少 / 向外暴露 (包括 API,时机,可访问到的线程) 越少越容易做到安全
FelixLiu
2019 年 5 月 28 日
@HuasLeung 哈哈哈,最近我也在学 go
FelixLiu
2019 年 5 月 28 日
@jimrok 主要可能某个活比较重,需要派多个线程去干才能保证延迟。
FelixLiu
2019 年 5 月 28 日
@momocraft 精辟啊

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/568284

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX