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

传媒网站后台免费模板php淘宝商城网站源码

传媒网站后台免费模板,php淘宝商城网站源码,兰州注册公司,如何做征信公司网站1.线程安全问题的主要诱因: 存在多条共享数据(临界资源) 存在多条线程共同操作这些共享数据 解决问题的根本方法: 同一时刻有且仅有一个线程在操作共享数据,其他线程必须等到该线程处理完数据后在对共享数据进行操作。 2.synchroized锁 分…

1.线程安全问题的主要诱因:

存在多条共享数据(临界资源)
存在多条线程共同操作这些共享数据

解决问题的根本方法:
同一时刻有且仅有一个线程在操作共享数据,其他线程必须等到该线程处理完数据后在对共享数据进行操作。
在这里插入图片描述

2.synchroized锁

在这里插入图片描述
在这里插入图片描述
分析:
补充:
synchronized用于解决同步问题,当有多条线程同时访问共享数据时,如果不进行同步,就会发生错误,java提供的解决方案是:只要将操作共享数据的语句在某一时段让一个线程执行完,在执行过程中,其他线程不能进来执行可以。解决这个问题。这里在用synchronized时会有两种方式,一种是上面的同步方法,即用synchronized来修饰方法,另一种是提供的同步代码块。
同步就是:一个对象同一时间只能为一个同步代码块服务
同步代码块需要传递的对象(锁对象):就是锁住这个对象,表示这个对象正在为我服务,其他人不能用(非synchronized代码块、方法除外)。
同步方法:就是同步代码块,同步锁对象是this
同步静态方法:就是同步代码块,同步锁对象是类的class对象(Demo类里的静态方法锁对象就是Demo.class)。
当锁的是不同的对象:相当于没有锁机制,皆为异步。

3.synchronize底层实现原理

(1)实现synchronized的基础
Java对象头
Monitor:

hotspot虚拟机对象在内存中的分布区域分为3块:
对象头:一般而言,synchronized使用的锁对象是存储在java对象头里的。
Mark World是存储运行时自身数据,实现偏向锁和轻量级锁的关键。class metadata address是类型指针指向对象的类元数据,JVM通过这个指针确定该对象是哪个类的数据。
实例数据
对齐填充
在这里插入图片描述
在运行期间,Mard Word里存储的数据会随着锁标志位的变化而变化。Mark Word可能变化为存储以下数据结构。
在这里插入图片描述

Monitor:每个java对象天生自带了一把看不见的锁(内部锁)监视器锁。可以
理解为同步机制。
通过ObjectMonitor实现,C++实现。与锁池与等待池相关。
在这里插入图片描述
分析:
每个对象锁的线程都会被封装成ObjectWaiter来保存到里面。其中有个字段owner用来保存持有Object-monitor的线程。当多个线程同时访问同一段同步代码的时候,首先会进入到EntryList里面。当线程获取到对象的Monitor之后,就进入对象Object区域。并把owner对象设置为当前线程,count就会加一。若线程调用wait方法,释放当前持有的Monitor.owner会被回复成null,count=0。该线程即ObjectWaitor实例就会进入到waitsSet集合中等待被唤醒。若当前线程执行完毕,它也将释放Monitor锁,并复位其他变量的值,以便其他线程进入获取Monitor锁。
在这里插入图片描述
Monitor对象存在每个java对象的对象头中,synchronized锁便是通过这种方式去获取锁的。这也是java中任意对象可以作为锁的原因。
在这里插入图片描述
同步语句块的实现是同过Monitorenter与Monitorexit实现的。
Monitorexit指明同步代码块的结束位置,当执行Monitorenter指令时,当前线程将试图获取对象锁,即ObjectMonitor 所对应的monitor所对应的持有权。当count= 0时,线程就可以成功的获得Monitor,并将计数器设置为1,表示取锁成功。如果已经拥有锁的持有权,可以重入。
当其他线程持有锁,当前线程会阻塞在Monitorenter指令。
方法级的同步是隐式的。通过实现。
在这里插入图片描述
(2)synchronized的发展与优化
什么是重入:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
通过while(true)实现而不是sleep实现,不想放弃cpu的执行时间。
早在java4就有,当时默认是关闭的,java6后,默认为开启状态。
在这里插入图片描述
优化:
锁消除:(优化)
JIT编译时,对运行上下文进行扫描,去除不可能存在竞争的锁,可以节省毫无意义的请求锁时间。
代码demo:代码中的sb变量是不可能被线程共享的资源,JVM会自动消除内部的锁。
在这里插入图片描述
在这里插入图片描述
锁粗化(另一种极端):(缩小同步作用范围,即只在共享数据的实际作用范围。
频繁的互斥同步锁操作,会导致不必要的性能操作。):
通过扩大加锁的范围,避免反复加锁和解锁
在这里插入图片描述
(3)synchronized的四种状态
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(4)锁的内存语义
在这里插入图片描述
线程A释放锁,线程B获取锁,这个过程的实质是线程A通过主内存向线程B发送消息,而之前的MarkWorld可以理解为是位于主存。而位于栈里的DisplayMarkWorld则是位于线程中的本地内存的。既然线程A已经可以确保可以将DisplayMarkWorld同步到MarkWorld中,也就意味着完成了对共享数据的操作。也就表明已经可以解锁,并且表明已经解锁成功了。

http://www.yayakq.cn/news/953930/

相关文章:

  • 二维码网站建设中文企业网站模板免费下载
  • asp网站开发好怎么预览中国国家城乡建设部网站
  • 新闻发布系统网站模板网站设计优点
  • 设计做任务的网站咸阳网站建设有哪些
  • 怎么才能建立网站wordpress添加头像
  • 网站建设合同模式2018年做网站赚钱
  • 婚庆公司网站唐河网站建设
  • 徐州有哪些做网站互联网推广和互联网营销
  • 江苏省宿迁市建设局网站首页网站集约化建设要求
  • 商城手机网站制作汕头网站设计价格
  • 建设银行招标网站沈阳建设网站公司
  • 刷单网站搭建增加wordpress的用户
  • 常德小学报名网站重庆舞台搭建招聘
  • 建设网站都需要什么wordpress编辑文章中图片
  • 如何建网站挣钱河南整站百度快照优化
  • 十堰网站建设_网站制作_软件开发_网店培训 优易建站模板招募设计师
  • asa8.4 做网站映射代码重构网站
  • 北京常见网站建设推荐哪个素材网站比较好用
  • 东莞建站模板后台响应式网站介绍
  • 移动互联网站开发工程师做小程序还是做网站
  • 网站建设怎样找客户网络营销策划的方法
  • 大学跳蚤市场网站建设wordpress 顶一下
  • 学做网站论坛教程湖南长沙网站建设
  • 中国建设银行掌上银行官方网站做网站最清晰的字体
  • 服务器如何搭建php网站网站推广员能力要求
  • 中国站免费推广入口域名注册商查询
  • jquery 开发网站附近网站建设公司哪家好
  • 网站优化排名软件网站民宿网站建设方案
  • 在网站上做封面河北加工活外发加工网
  • 珠海十大网站建设公司无限弹窗网站链接怎么做