JAVA并发之synchronized

synchronized

synchronized

首先synchronized是jdk提供的内置锁,既然是锁那就具有互斥性和可见性,可保证在多线程竞争资源时不会出现并发问题

synchronized用法

根据修饰对象分类

  • 同步方法

    1. 同步静态方法

      public synchronized void method(){
      //逻辑代码
      }
      
    2. 同步非静态方法

      public synchronized static void method(){
      //逻辑代码
      }
      
  • 同步代码块

    synchronized(object) {}
    
    

    根据获取的锁分类

​ 在 Java 中,每个对象都会有一个 monitor 对象,这个对象其实就是 Java 对象的锁 ,因为类对象本来也是一个对象,所以每个类也有一个类锁。

​ 当某一线程占有这个monitor对象的时候,先看monitor计数器是不是0,如果是0,说明还没有线程占用,这时候该线程占有这个锁,并且计数器+1;如果计数器不是0,看当前占有锁的线程是不是本线程,如果是本线程就+1,这就是可重入的概念;如果当前计数器不是0也不是当前线程占有,则进去阻塞状态。

  • 对象锁

  • 类锁

synchronized原理分析

代码块加锁的实现是通过monitorEnter 和monitorExit来实现的,通过javap 反编译class文件你会发现synchronized所包含的代码前面和后面分别加了monitorEnter 和monitorExit,其中有两个monitorExit,第一个是正常解锁时执行的,第二个是异常时用来释放锁的。

在这里插入图片描述
对方法加锁的实现是通过标志位ACC_SYNCHRONIZED来实现的

在这里插入图片描述

JAVA虚拟机对synchronized的优化

在jdk1.6以前synchronized是一个重量级锁,1.6及以后将它优化为无锁,偏向锁,轻量级锁,重量级锁

偏向锁: 在对象第一次被某一线程占有的时候 ,将线程号写入,下一个线程再次访问时,发现线程号是当前占用线程号,直接成功,否则升级为轻量级锁

轻量级锁:是一个自旋锁,通过cas自旋来获取锁,超过一定次数升级为重量级锁

重量级锁:通过互斥量来实现,性能比较低

synchronized是一个非公平锁

moniter 对象中有两个集合 _EntryList, _WaitSet 当线程阻塞的时阻塞线程会进入_EntryList,等待count为0重新调用,当线程调用了wait方法是线程会阻塞进入_WaitSet中 等待notify唤醒 ,无论是哪种情况 当一个新的线程进来同时count 为0 是 都不能保证新的线程在_EntryList或者_WaitSet 中先执行其中线程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值