java-多线程-线程安全简单介绍


本文对多线程的线程安全做一个简单介绍和探讨。

在特定场景下,多线程是一把利刃,可以帮助我们提升业务处理的性能,充分利用服务器的性能,甚至在某些情况下会让编程从逻辑上更简单清晰。

但是他同时是一把双刃剑,我们早就习惯了艳丽的玫瑰总是带刺的。很多时候他是复杂的,存在安全风险的。

本文将简单谈谈线程安全,也就是多线程下,程序运行正确,运行的和我们的预期是保持一致的。

原子性

我们在多线程中常常涉及到这个概念。如果我们的操作不是原子操作,那么在多线程下执行,很容易产生预期之外的结果。如* ++count* 类似这样的操作他就不是一个原子操作,包含了"读 改 写"的操作。

竞争条件

我们在程序中常常存在竞争条件,如:

  • 检查再运行: 我们在检查条件后,执行操作的时候,很可能另外的进场已经修改了此前的条件;如代码中常见的惰性初始化;

当我们遇到非原子操作,在多线程下可能会遇到问题。此时我们该怎么做呢?我们考虑使用锁。如java中提供的内置锁机制: synchronized块。

  • 简单说明下他的运作机制,当某个线程进入此代码块,他将获得锁,此时其他进场将无法获得锁,也就无法执行这段代码块,那么这块可以看做我们上面看到的原子操作,线程们串行地执行这个代码块;
  • 通过上面的解释你也会意识到,

文章作者: Xudong Jiang
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Xudong Jiang !
 上一篇
java并发专题-线程介绍 java并发专题-线程介绍
今天介绍下并发中使用的线程概念 线程简介 会创建一个Java进程。现代操作系统调度的最小单元是线程,也叫轻量级进程(Light WeightProcess),在一个进程里可以创建多个线程,这些线程都拥有各自的计数器、堆栈和局部变量等属性,并
2018-09-08
下一篇 
java虚拟机垃圾收集算法介绍 java虚拟机垃圾收集算法介绍
今天介绍下java虚拟机内的垃圾收集算法 分代收集理论 分代假设: 弱分代假说(Weak Generational Hypothesis):绝大多数对象都是朝生夕灭的 强分代假说(Strong Generational Hypothesis
2018-05-27
  目录