Java并发编程实战5:安全性、活跃性以及性能

Java并发编程实战5:安全性、活跃性以及性能,第1张

文章目录
  • 前言
  • 一、安全性
      • 安全性:程序按照我们期望的执行
      • 数据竞争(Data Race):存在共享数据并且该数据会发生变化,通俗地讲就是有多个线程会同时读写同一数据,必须共享会发生变化的数据
      • 竞态条件(Race Condition)。所谓竞态条件,指的是程序的执行结果依赖线程执行的顺序。在并发场景中,程序的执行依赖于某个状态变量,也就是类似于下面这样:
  • 二、活跃性
      • 活锁:有时线程虽然没有发生阻塞,但仍然会存在执行不下去的情况,这就是所谓的“活锁”
      • 饥饿:所谓“饥饿”指的是线程因无法访问所需资源而无法执行下去的情况。
  • 总结


前言
一、安全性 安全性:程序按照我们期望的执行 数据竞争(Data Race):存在共享数据并且该数据会发生变化,通俗地讲就是有多个线程会同时读写同一数据,必须共享会发生变化的数据 竞态条件(Race Condition)。所谓竞态条件,指的是程序的执行结果依赖线程执行的顺序。在并发场景中,程序的执行依赖于某个状态变量,也就是类似于下面这样:
if (状态变量 满足 执行条件) {
  执行 *** 作
}

面对数据竞争和竞态条件问题,又该如何保证线程的安全性呢?其实这两类问题,都可以用互斥这个技术方案,而实现互斥的方案有很多,CPU 提供了相关的互斥指令, *** 作系统、编程语言也会提供相关的 API。从逻辑上来看,我们可以统一归为:锁。

二、活跃性

所谓活跃性问题,指的是某个 *** 作无法执行下去。我们常见的“死锁”就是一种典型的活跃性问题,当然除了死锁外,还有两种情况,分别是“活锁”和“饥饿”

活锁:有时线程虽然没有发生阻塞,但仍然会存在执行不下去的情况,这就是所谓的“活锁” 饥饿:所谓“饥饿”指的是线程因无法访问所需资源而无法执行下去的情况。
总结

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/langs/798479.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-06
下一篇 2022-05-06

发表评论

登录后才能评论

评论列表(0条)

保存