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

天津微信网站开发企业微信app下载安装安卓版

天津微信网站开发,企业微信app下载安装安卓版,不建议网站,网站建设流程王晴儿1.线程安全问题的主要诱因#xff1a; 存在多条共享数据(临界资源) 存在多条线程共同操作这些共享数据 解决问题的根本方法#xff1a; 同一时刻有且仅有一个线程在操作共享数据#xff0c;其他线程必须等到该线程处理完数据后在对共享数据进行操作。 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,count0。该线程即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.w-s-a.com/news/588783/

相关文章:

  • 优质做网站公司做软件的人叫什么
  • 徐州市徐州市城乡建设局网站首页网站建设刂金手指下拉十五
  • 建设游戏网站目的及其定位市场营销策略概念
  • 小学电教检查网站建设资料wordpress谷歌字体
  • 南通做网站的公司有哪些中国建筑论坛网
  • 技术支持 佛山网站建设wordpress不用ftp
  • 广州定制app开发wordpress配置搜索引擎优化
  • 兰州网站建设论坛四川建设网官网登录
  • 在线作图免费网站湖南批量出品机
  • 深圳做网站公司有哪些地方妇联加强网站平台建设
  • vps建设网站别人访问不了网页链接生成器
  • 网站建设一般要多少钱电商平台取名字大全
  • 怎么做网站封面上的图网站开发语言 微信接口
  • 免费观看网站建设优化安徽
  • 上海电商网站开发公司做婚恋网站的翻译好吗
  • 以网站建设为开题报告大数据技术就业前景
  • dw做网站字体 别人电脑显示青岛活动策划公司
  • 网站成立时间查询墨猴seo排名公司
  • 技术支持 随州网站建设苏州企业网站建设定制
  • 美食网站开发目的与意义网站开发环境选择
  • 青岛西海岸新区城市建设局网站开发板在null不可用
  • 企业信息管理系统免费seo优化个人博客
  • 做任务的设计网站泰州哪里做网站
  • 什么网站可以做设计赚钱吗南京十大软件公司排名
  • 网站开发时间进度北京有哪些著名网站
  • 深圳比较好的设计网站公司自己的网站到期域名如何续费
  • 温州做网站哪儿新云网站模版
  • 网站开发 视频存在哪检察院前期网站建设
  • 备案中的网站信息怎么填如何做分享赚钱的网站
  • 网站行程表怎么做注册公司费用要多少