当前位置: 首页 > news >正文

动漫网站怎么做外贸定制网站建设电话

动漫网站怎么做,外贸定制网站建设电话,微信网站是怎么做的,网站建设云南才力synchronized 关键字 synchronized关键字解决的是多个线程之间访问资源的同步性,synchronized关键字可以保证被它 修饰的方法或者代码块在任意时刻只能有一个线程执行。 另外,在 Java 早期版本中, synchronized属于重量级锁,效率…

synchronized 关键字

synchronized关键字解决的是多个线程之间访问资源的同步性,synchronized关键字可以保证被它
修饰的方法或者代码块在任意时刻只能有一个线程执行。 另外,在 Java 早期版本中,
synchronized属于重量级锁,效率低下,因为监视器锁(monitor)是依赖于底层的操作系统的
Mutex Lock 来实现的,Java 的线程是映射到操作系统的原生线程之上的。如果要挂起或者唤醒一
个线程,都需要操作系统帮忙完成,而操作系统实现线程之间的切换时需要从用户态转换到内核
态,这个状态之间的转换需要相对比较长的时间,时间成本相对较高,这也是为什么早期的synchronized 效率低的原因。庆幸的是在 Java 6 之后 Java 官方对从 JVM 层面对synchronized 较
大优化,所以现在的 synchronized 锁效率也优化得很不错了。JDK1.6对锁的实现引入了大量的优
化,如自旋锁、适应性自旋锁、锁消除、锁粗化、偏向锁、轻量级锁等技术来减少锁操作的开销。

synchronized和lock区别

在这里插入图片描述

synchronized 关键字的底层原理

synchronized 关键字底层原理属于 JVM 层面。
① synchronized 同步语句块的情况

public class SynchronizedDemo {public void method() {synchronized (this) {System.out.println("synchronized 代码块");}}
}

synchronized 同步语句块的实现使用的是 monitorenter 和 monitorexit 指令,其中
monitorenter 指令指向同步代码块的开始位置,monitorexit 指令则指明同步代码块的结束位置。 当
执行 monitorenter 指令时,线程试图获取锁也就是获取 monitor(monitor对象存在于每个Java对象的
对象头中,synchronized 锁便是通过这种方式获取锁的,也是为什么Java中任意对象可以作为锁的原
因) 的持有权.当计数器为0则可以成功获取,获取后将锁计数器设为1也就是加1。相应的在执行
monitorexit 指令后,将锁计数器设为0,表明锁被释放。如果获取对象锁失败,那当前线程就要阻塞等待,直到锁被另外一个线程释放为止。

② synchronized 修饰方法的的情况

public class SynchronizedDemo2 {public synchronized void method() {System.out.println("synchronized 方法");}
}

synchronized 修饰的方法并没有 monitorenter 指令和 monitorexit 指令,取得代之的确实是
ACC_SYNCHRONIZED 标识,该标识指明了该方法是一个同步方法,JVM 通过该 ACC_SYNCHRONIZED 访问标志来辨别一个方法是否声明为同步方法,从而执行相应的同步调用。

synchronized 锁的优化机制

从JDK1.6版本之后,synchronized本身也在不断优化锁的机制,有些情况下他并不会是一个很重量
级的锁了。优化机制包括自适应锁、自旋锁、锁消除、锁粗化、轻量级锁和偏向锁。锁的状态从低到高依次为无锁->偏向锁->轻量级锁->重量级锁,升级的过程就是从低到高,降级在一定条件也是有可能发生的。
在这里插入图片描述

  1. 偏向锁:在锁对象的对象头中记录⼀下当前获取到该锁的线程ID,该线程下次如果⼜来获取该锁就可以直接获取到了

  2. 轻量级锁:由偏向锁升级⽽来,当⼀个线程获取到锁后,此时这把锁是偏向锁,此时如果有第⼆个线程来竞争锁,偏向锁就会升级为轻量级锁,之所以叫轻量级锁,是为了和重量级锁区分开来,轻量级锁底层是通过⾃旋来实现的,并不会阻塞线程

  3. 如果⾃旋次数过多仍然没有获取到锁,则会升级为重量级锁,重量级锁会导致线程阻塞

  4. ⾃旋锁:⾃旋锁就是线程在获取锁的过程中,不会去阻塞线程,也就⽆所谓唤醒线程,阻塞和唤醒这两个步骤都是需要操作系统去进⾏的,⽐较消耗时间,⾃旋锁是线程通过CAS获取预期的⼀个标记,如果没有获取到,则继续循环获取,如果获取到了则表示获取到了锁,这个过程线程⼀直在运⾏中,相对⽽⾔没有使⽤太多的操作系统资源,⽐较轻量。

Java对象结构

Java对象由三个部分组成:对象头、实例数据、对齐填充。

1、对象头由两部分组成,第一部分存储对象自身的运行时数据:哈希码、GC分代年龄、锁标识状态、线程持有的锁、偏向线程ID(一般占32/64 bit)。第二部分是指针类型,指向对象的类元数据类型(即对象代表哪个类)。如果是数组对象,则对象头中还有一部分用来记录数组长度。

2、实例数据用来存储对象真正的有效信息(包括父类继承下来的和自己定义的)

3、对齐填充:JVM要求对象起始地址必须是8字节的整数倍(8字节对齐)

http://www.shuangfujiaoyu.com/news/62013.html

相关文章:

  • 2345官方网站黑马培训价目表
  • 最大的网站建设公司aso优化排名违法吗
  • 课程网站建设ppt模板搜索引擎优化怎么做的
  • 创建一个网站要多少钱百度账号设置
  • 阜南做网站互动营销案例100
  • 专业新站整站快速排名公司友情链接出售网
  • 公司的网站建设服务费合肥网络优化公司有几家
  • 网站制作实训希爱力副作用太强了
  • 南昌网站维护制作google seo优化
  • 郑州酒店网站建设百度推广投诉电话客服24小时
  • 找合伙人做红木家具网站网页设计期末作业模板
  • 东莞网站平面设计公司seo的方法
  • 大连网站建设仟亿科技seo策略分析
  • 新网站2个月没有收录电商网站设计
  • 北海做网站哪家好自助建站官网
  • wordpress 官网主题下载seo的优化步骤
  • 深圳城乡和建设局网站首页百度sem优化师
  • 网站设计制作价格怎么算百度一下你就知道首页
  • 网页建站工具qq群推广
  • 网站空间免费申请免费下载b站视频软件
  • 做网站必须用域名吗佛山优化推广
  • 杭州 专业网站建设 网络服务品牌营销理论
  • 全自动营销软件seo免费工具
  • 呼市网站seo优化工资提成怎么算百度平台推广的营销收费模式
  • 网上做网站赚钱关键词完整版
  • SEO网站建设全方位部署seo免费资源大全
  • 加强网站制度建设十大营销策划公司排名
  • 网站推广官方平台小程序开发教程全集免费
  • 唐山长城网站建设免费google账号注册入口
  • 哪里有免费的网站模板下载 迅雷下载软件广告联盟广告点击一次多少钱