java如何保证线程安全

2020年06月24日10:45:36
APP永久免费入口

并发(concurrency)一个并不陌生的词,简单来说,就是cpu在同一时刻执行多个任务。而Java并发则由多线程实现的。在jvm的世界里,线程就像不相干的平行空间,串行在虚拟机中,那么java如何保证线程安全?

网络安全小知识:

保证类线程安全的措施:

不共享线程间的变量;

设置属性变量为不可变变量;

每个共享的可变变量都使用一个确定的锁保护;

1.保证线程安全的思路:

通过架构设计

通过上层的架构设计和业务分析来避免并发场景。比如需要用多线程或分布式集群统计一堆用户的相关统计值,由于用户的统计值是共享数据,因此需要保证线程安全。从业务上分析出用户之间的数据并不共享,因此可以设计一个规则来保证一个用户的计算工作和数据访问只被一个线程或一台机器完成,这样从设计上避免了接下来可能的并发问题。

2.保证类无状态:

有状态会限制横向扩展能力,也可能产生并发问题。如果类是无状态的,那它永远是线程安全的。因此在设计阶段尽可能用无状态的类来满足业务需求。

3.区别原子操作和复合操作:

常见的复合操作包括check-then-act,i++等。

虽然check-then-act从表面上看很简单,但却普遍存在与我们日常的开发中,特别是在数据库存取这一块。比如我们需要在数据库里存一个客户的统计值,当统计值不存在时初始化,当存在时就去更新。如果不把这组逻辑设计为原子性的就很有可能产生出两条这个客户的统计值。

情缘阅读网提醒您:为了保障自己的安全,在网络中一定要实施网络安全防范措施与应用措施,另外多学习一些网络安全常识和网络安全技术知识也是非常重要的。

责任编辑:张小付