2021年跨年阵容出来了,小编也带来新年福利“Java”,不知道你就要落伍啦。

文末有惊喜,一定看完哦,小编准备的新年礼物。

1、为什么要用锁?

锁-是为了解决并发操作引起的脏读、数据不一致的问题。2、锁实现的基本原理

2.1、volatile

Java编程语言允许线程访问共享变量, 为了确保共享变量能被准确和一致地更新,线程应该确保通过排他锁单独获得这个变量。Java语言提供了volatile,在某些情况下比锁要更加方便。

volatile在多处理器开发中保证了共享变量的“ 可见性”。可见性的意思是当一个线程修改一个共享变量时,另外一个线程能读到这个修改的值。

结论:如果volatile变量修饰符使用恰当的话,它比synchronized的使用和执行成本更低,因为它不会引起线程上下文的切换和调度。

2.2、synchronizedsynchronized通过锁机制实现同步。

先来看下利用synchronized实现同步的基础:Java中的每一个对象都可以作为锁。

具体表现为以下3种形式。对于普通同步方法,锁是当前实例对象。

对于静态同步方法,锁是当前类的Class对象。

对于同步方法块,锁是Synchonized括号里配置的对象。

当一个线程试图访问同步代码块时,它首先必须得到锁,退出或抛出异常时必须释放锁。

synchronized是基于Monitor来实现同步的。

Monitor从两个方面来支持线程之间的同步:互斥执行

协作

1、Java 使用对象锁 ( 使用 synchronized 获得对象锁 ) 保证工作在共享的数据集上的线程互斥执行。

2、使用 notify/notifyAll/wait 方法来协同不同线程之间的工作。

3、Class和Object都关联了一个Monitor

Monitor 的工作机理线程进入同步方法中。

为了继续执行临界区代码,线程必须获取 Monitor 锁。如果获取锁成功,将成为该监视者对象的拥有者。任一时刻内,监视者对象只属于一个活动线程(The Owner)

拥有监视者对象的线程可以调用 wait() 进入等待集合(Wait Set),同时释放监视锁,进入等待状态。

其他线程调用 notify() / notifyAll() 接口唤醒等待集合中的线程,这些等待的线程需要重新获取监视锁后才能执行 wait() 之后的代码。

同步方法执行完毕了,线程退出临界区,并释放监视锁。

偏向锁:

无锁竞争的情况下为了减少锁竞争的资源开销,引入偏向锁。

轻量级锁

轻量级锁所适应的场景是线程交替执行同步块的情况。

2021年马上来临,UP主给大家准备了新年礼物Java系列上述视频+源码,需要的小伙伴点赞+评论,私信“资料”无偿获取哦。

java跨年_2021年跨年阵容出来了,小编也带来新年福利“Java”相关推荐

  1. 干干净净用java_干掉全家桶!小编教你干干净净用Java

    原标题:干掉全家桶!小编教你干干净净用Java 现在很多移动应用软件,都是通过Java进行开发的,因此很多人的电脑上也都安装了Java.不过最近Java和国内某网络厂商进行合作,在安装Java的时候会 ...

  2. 让电脑死机的java代码_小编为你win7系统Java活动脚本出错导致电脑死机的还原方法...

    随着电脑的使用率越来越高,我们有时候可能会遇到win7系统Java活动脚本出错导致电脑死机问题,如果我们遇到了win7系统Java活动脚本出错导致电脑死机的问题,要怎么处理win7系统Java活动脚本 ...

  3. 在职场中Java工程师通宵都要看完这几本阿里P8小编都强烈推荐的Java电子书

    以下是小编收藏的电子书籍以及java架构学习资料 面试资料 Java核心知识文档 Java核心知识PDF 1. JVM 2. JAVA集合 3. JAVA多线程并发 4. JAVA基础 5. Spri ...

  4. 如何将java清除干净_干掉全家桶!小编教你干干净净用Java

    现在很多移动应用软件,都是通过Java进行开发的,因此很多人的电脑上也都安装了Java.不过最近Java和国内某网络厂商进行合作,在安装Java的时候会推广一系列的软件.本文的方法,即教大家如何杜绝这 ...

  5. java 强制转换 效率_Java 性能优化:35 个小细节,让你提升 Java 代码的运行效率...

    代码优化细节 1.尽量指定类.方法的final修饰符 2.尽量重用对象 3.尽可能使用局部变量 4.及时关闭流 5.尽量减少对变量的重复计算 6.尽量采用懒加载的策略,即在需要的时候才创建 7.慎用异 ...

  6. 体育馆预约小程序 运动场地预约小程序 java运动场地预约系统 体育馆预约管理系统 基于微信小程序的体育馆预约系统 java毕业设计选题推荐

  7. win10添加java路径_小编解惑win10系统设置java路径变量的还原方案

    许多win10系统用户在工作中经常会遇到对win10系统设置java路径变量的设置方法,想必大家都遇到过需要对win10系统设置java路径变量进行设置的情况吧,那么应该怎么设置win10系统设置ja ...

  8. JAVA中几种循环结构的表示_本文通过实例讲解给大家介绍Java中for、while、do while三种循环语句的区别,具体详情如下所示:第一种:for循环 循环结构for语句的格式...

    本文通过实例讲解给大家介绍Java中for.while.do while三种循环语句的区别,具体详情如下所示: 第一种:for循环 循环结构for语句的格式: for(初始化表达式;条件表达式;循环后 ...

  9. java小白能学吗,掌握这些知识,零基础小白也能快速学好Java!

    没基础如何快速学习Java开发?能靠自学吗?很多想学Java开发的人都会有这样的疑问.也有的人可能上来就直奔主题聊语法,小编的建议还是要对Java基本属性以及特点应用领域做个大概了解,可当做学习前的热 ...

  10. 解决java前后端分离端口跨域问题

    解决java前后端分离端口跨域问题 参考文章: (1)解决java前后端分离端口跨域问题 (2)https://www.cnblogs.com/mollie-x/p/10449686.html 备忘一 ...

最新文章

  1. Java中Queue和BlockingQueue的区别
  2. LVS三种工作模式介绍对比和十种调度算法介绍
  3. python脚本忽略MySQLdb的warnings
  4. 个人代码库のC#千千静听 - 桌面歌词 (功能模拟)
  5. idea 这么还原debug_看源码,我为什么推荐IDEA ?
  6. php 大图找小图,点击小图弹出大图,点击网页任何部分隐藏大图
  7. 第1次作业:阅读优秀博文谈感想
  8. hdu 3923 Invoker
  9. AD小技巧:update changes to PCB后如何调整布线
  10. 把C#对象转换为json字符串
  11. html5论文参考文献合集
  12. CentOS7入门:使用Vi文本编辑器
  13. 网吧母盘网上精华+个人总结=超详细
  14. 游戏测试成长之路02-测试用例
  15. threejs-自定义着色器材质
  16. yocto下的cmake版本hello world,追加分层使用
  17. Lib库使用学习笔记
  18. java mvp模式_什么是mvp开发模式?(下面就对Android中MVP做一些阐述)
  19. 现代浏览器的模型(一)
  20. @Primary 和 @Qualifier的区别

热门文章

  1. linux notify机制,转一篇文章,linux文件访问notify机制
  2. labview波形图表横轴使用当前时间
  3. 刺客漫谈ChatGPT
  4. 你的鸿蒙系统手机连着按3次,隐藏着放大器、望远镜功能,很实用
  5. 中国液态金属量子计算机,中国液态金属逆天!逆重力攀爬
  6. 一个响应式框架——agera
  7. oracle 10g编程
  8. PMP考试 过程管理计划与过程分析的区别和联系
  9. git 安装+开始第一个GitHub项目
  10. 广东计算机高校录取排名,广东高校录取情况出炉,这些院校专业最热门