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

济南免费网站建设优化珠海做网站最好的公司有哪些

济南免费网站建设优化,珠海做网站最好的公司有哪些,象山网站建设,网络运营推广是做什么的final的安全发布 两个关键字“发布”“安全” 所谓发布通俗一点的理解就是创建一个对象#xff0c;使这个对象能被当前范围之外的代码所使用 比如Object o new Object(); 然后接下来使用对象o 但是对于普通变量的创建#xff0c;之前分析过#xff0c;大致分为三个步骤使这个对象能被当前范围之外的代码所使用 比如Object o new Object(); 然后接下来使用对象o 但是对于普通变量的创建之前分析过大致分为三个步骤 1、分配内存空间 2、将o指向分配的内存空间 3、调用构造函数来初始化对象 这三个步骤不是原子的如果执行到第二步还没有进行初始化此时对象已经不是null了如果被其他代码访问这将收获一个错误的结果。 或者说对象尚未完全创建就被使用了其他线程看到的结果可能是不一致的这就是不安全的发布 根本原因就是JVM创建对象的过程涉及到分配空间、指针设置、数据初始化等步骤并不是同步的涉及到主存与缓存、处理器与寄存器等可见性没办法得到保障 所以说什么是安全发布简单理解就是对象的创建能够保障在被别人使用前已经完成了数据的构造设置或者说一个对象在使用时已经完成了初始化。 不幸的是Java对此并没有进行保障你需要自己进行保障比如synchronized关键字原子性、排他性就可以做到这一点 不安全的发布实例 怎么保障安全发布有几种方法 一种是刚才提到的锁机制通过加锁可以保障中间状态不会被读取 另外还有 1、借助于volatile或者AtomicReference声明对象 2、借助于final关键字 3、在静态初始化块中进行初始化JVM会保障 4、将对象引用保存到一个由锁保护的域中 5、借助AtomicReference 很显然对于锁机制那些线程安全的容器比如ConcurrentMap也是满足这条的所以也是安全发布 对于final当你创建一个对象时使用final关键字能够使得另一个线程不会访问到处于“部分创建”的对象 因为当构造函数退出时final字段的值保证对访问构造对象的其他线程可见 如果某个成员是final的JVM规范做出如下明确的保证 一旦对象引用对其他线程可见则其final成员也必须正确的赋值 所以说借助于final就如同你对对象的创建访问加锁了一般天然的就保障了对象的安全发布。 对于普通的变量对象的内存空间分配、指针设置、数据初始化和将这个变量的引用赋值给另一个引用之间是可能发生重排序的所以也就导致了其他线程可能读取到不一致的中间状态 但是对于final修饰的变量JVM会保障顺序 不会在对final变量的写操作完成之前与将变量引用赋值给其他变量之间进行重排序也就是final变量的设置完成始终会在被读取之前 final除了不可变的定义之外还与线程安全发布息息相关 借助于final可以达到对象安全发布的保障只需要借助于final不在需要任何额外的付出他能够保障在多线程环境下总是能够读取到正确的初始化的值 所以如果你不希望变量后续被修改你应该总是使用final关键字 而且很显然在某些场景下final也可以解决一定的安全问题 实例 使用synchronized锁的时候作为锁的对象最好要加上final修饰符因为可能线程会改变锁变量持有的具体的对象。 demo如下 public class Test02 { static Object lock new Object(); public static void main(String[] args) {Thread t1 new Thread(() - {lock new Object();synchronized (lock) {for (int i 0; i 10; i) {try {Thread.sleep(5);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(A);}}});Thread t2 new Thread(() - {lock new Object();synchronized (lock) {for (int i 0; i 10; i) {try {Thread.sleep(5);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(B);}}});t1.start();t2.start(); }} 但是要是把锁改成final的。代码如下 public class Test02 {static final Object lock new Object();public static void main(String[] args) {Thread t1 new Thread(() - { // lock new Object(); // 编译出错final不能修改synchronized (lock) {for (int i 0; i 10; i) {try {Thread.sleep(5);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(A);}}});Thread t2 new Thread(() - { // lock new Object();synchronized (lock) {for (int i 0; i 10; i) {try {Thread.sleep(5);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(B);}}});t1.start();t2.start();} } 实例参考https://juejin.cn/post/7104070219806539806 原理参考https://www.cnblogs.com/noteless/p/10416678.html
http://www.dnsts.com.cn/news/32239.html

相关文章:

  • asp网站后台上传不了图片长尾词挖掘免费工具
  • 成都市建设招标网站九江php网站建设兼职
  • 怎样建设网站施工如何制作手机版网站
  • 穷游网站 做行程 封面綦江在线
  • 杭州做公司网站的公司南化建设公司官网
  • 网站开发团队如何接活买一个软件大概多少钱
  • 长沙品牌网站制作服务报价网站建设dw实训总结
  • 织梦做不了视频网站tv网站建设
  • 如何搭建一个企业子账号网站注册平台需要什么条件
  • 网站建设配图最新实时大数据
  • 直接采用模板网站有什么缺点wordpress建站教程道一
  • 建设部网站碎发零能耗住宅wordpress仿阿里主题
  • 白山网站制作网站开发企业培训
  • 乐趣公园 wordpress杭州江干区抖音seo品牌
  • 怎么自己做网站加盟亚马逊在电子商务网站建设
  • jsp怎么做网站的删除江苏同邦建设有限公司网站
  • 哪些网站做国际贸易比较好媒体网站推进信息化建设
  • 网站建设薪水seo门户网站优化
  • 做网页专题 应该关注哪些网站建一个购物网站多少钱
  • 成都开网站用个人电脑做网站的步骤
  • 史志网站建设方案北京网站制作计划
  • 永州市规划建设局网站深圳网站建设 信科网络
  • 零基础网站建设入门到精通视频教程网上产品免费推广平台
  • 外贸营销网站推广网站开发人员任职资格
  • 绘制网站结构图php做网站视频
  • 网路营销网站策划书好网站推荐一下
  • 网站购买广告位苏州专业建站
  • 南宁做网站设计方案源码猫网站建设ym361
  • 做网站 违法系统搭建是什么意思
  • 贵州做网站找谁工商注册深圳