Java多线程- synchronized关键字总结

news/2024/5/17 17:22:42 标签: java, 开发语言, synchronized, , 多线程

目录

多线程的概要 

Synchronized关键字

synchronized%E5%8A%A0%E9%94%81%E8%BF%87%E7%A8%8B-toc" style="margin-left:0px;">synchronized过程

synchronized%E9%94%81%E4%BC%98%E5%8C%96-toc" style="margin-left:0px;"> synchronized优化

        消除

        粗化


多线程的概要 

      首先对于的条件和要点进行一个总结:

  • 使用来保护代码片段的, 以保证多线程的安全性, 一次只允许一个线程执行被保护的代码.
  • 可以管理视图进入被保护代码的线程, 提高多线程安全
  • 一个可以有一个或多个关联的条件对象

对于synchronized来说, 如果它修饰的是方法, 那么他保护的代码段将是整个方法

Synchronized关键字

        结合策略, 可以得出以下结论:

  1. synchronized开始是乐观, 如果冲突太频繁了, 那么synchronized就升级为悲观
  2. synchronized开始是轻量级, 如果单个线程占用synchronized的时间长了, 就会变成重量级.
  3. 此处的轻量级和自旋有重叠的部分
  4. synchronized是一种不公平的
  5. synchronized是一种可重入
  6. synchronized不是读写

synchronized%E5%8A%A0%E9%94%81%E8%BF%87%E7%A8%8B">synchronized过程

  1.  首先对一个无的代码段进行加,  这个会进入偏向的状态, 此处的偏向不是真正的加, 而是给这个做一个标记, 表示这个属于哪个线程, 如果后续没有线程来抢, 那么就不会进行其他同步操作.  如果有的话, 那么这个就会升级为真正的, 进入一种以自旋为基础的轻量级状态
  2. 进入轻量级, 此处的轻量级是通过CAS实现的, 轻量级适用于抢比较少的多线程环境, 基于自旋, 如果其他线程来抢就会阻塞等待, 并且在极短时间内进行第二次访问, 直到拿到. 但是如果长时间没有释放就会造成CPU空转, 浪费CPU资源. 所以如果有多个线程频繁的抢, 就会升级为重量级. 让线程放弃CPU, 进入内核态,此时有操作系统来通知线程这个是否被释放, 然后再来调度这些抢的线程.
  3. 轻量级的竞争激烈后, 就会升级为重量级,如果该被占用, 则加失败. 此时线程进入的等待队列, 挂起. 等待被操作系统唤醒.经过一段时间后, 这个被其他线程释放了, 操作系统也想起了这个挂起的线程, 于是唤醒这个线程, 尝试重新获取.

synchronized%E9%94%81%E4%BC%98%E5%8C%96"> synchronized优化

        消除

        遵循于非必要不加的规则, synchronized实现了消除机制, 也就是在非多线程情况下, synchronized会自动识别线程情况, 自动消除掉不必要的
        例如我们常用的线程安全的StringBuffer, 但是如果在单线程使用, 那么就会在编译的时候去除synchronized关键字, 来减少非必要的开销.

java">StringBuffer sb = new StringBuffer();
sb.append("a");
sb.append("b");
sb.append("c");
sb.append("d");

此处每次的append操作都会加, 造成了非必要的资源浪费

        粗化

        在一段代码中, 可能存在两个被保护的代码段, 如下:

 如果这两个代码段(代码段1和代码段2)之间, 不存在竞争的情况话, 就可以省去中间的解和加, 这样就避免的多余的加操作, 节约了CPU资源


http://www.niftyadmin.cn/n/243698.html

相关文章

kali利用airgeddon破解WiFi (详细安装和使用教程)

目录 前言 一,软件&硬件环境 二,前期配置 Airgeddon安装和调试 #自带 #安装方法一 #安装方法二 #注意 网卡的配置 #打开服务 #加载网卡 三,运行操作 #检查 #主菜单 #打开监听模式 #查看周围可以攻击的网络 #截取…

2023什么电脑配置适合机器学习和人工智能

机器学习和人工智能应用有多种类型——从传统的回归模型、非神经网络分类器和以 Python SciKitLearn 和 R 语言的功能为代表的统计模型,到使用 PyTorch 和 TensorFlow 等框架的深度学习模型. 在这些不同类型的 ML/AI 模型中,也可能存在显着差异。“最佳”…

python识图原理及环境搭建

步骤一 :安装 anaconda 超详细Anaconda安装教程_极小白的博客-CSDN博客 anaconda用处 Anaconda包括Conda、Python以及一大堆安装好的工具包,比如:numpy、pandas等,conda是一个开源的包、环境管理器,可以用于在同一个机…

burpsuite 插件编写入门

文章目录 一、什么是扩展 / 插件?实现一个简单的 插件/扩展 系统 二、burp 的扩展三、开发步骤总结 一、什么是扩展 / 插件? 关于这个话题,知乎有一个回答题不错,主要也是引用了wikipedia 插件/扩展,是向现有的计算机…

『造轮子』亿级短URL生成器的架构设计及源码分享

📣读完这篇文章里你能收获到 了解博主的短链生成的架构设计思路学习不同的短链技术方案选择学习基于混淆的自增短URL算法了解博主造的轮子SuperShortLink短链开源项目感谢点赞收藏,避免下次找不到~ 文章目录 一、需求分析1. 短链生成及访问需求2. 短链应…

【Python基础入门学习】Python基础语法学习

基础认识 1. 注释2. 变量2.1 变量命名规则2.2 变量的类型2.3 不同类型之间的运算规则2.4 变量的输入和输出2.4.1 print 函数使用2.4.2 input 函数使用 2.5 变量的类型转换 3. 分支语句3.1 判断的定义3.2 if 判断语句基本语法3.3 else 处理条件不满足的情况3.4 逻辑运算3.5 if 的…

iOS Matter 操作证书签发方案

在 Matter 配网和操作中,为了信息交互的安全,在配网时,Commissioner自身需要完整的证书,同时需要向设备安装操作证书。 Matter 证书包含: RCA: 根证书 ICA: 中间证书,可选 NOC: 操作证书(注意有以下两种…

leetCode算法第一天

今天开始刷算法题,提升自己的算法思维和代码能力,加油! 文章目录 无重复字符的最长子串最长回文子串N形变换字符串转换整数 无重复字符的最长子串 leetCode链接 https://leetcode.cn/problems/longest-substring-without-repeating-characte…