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

网站开发名片灰色系网站

网站开发名片,灰色系网站,WordPress主题niRvana,学校类网站建设的分析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.laogonggong.com/news/131984.html

相关文章:

  • 有了域名之后怎么做网站东莞市品牌网站建设报价
  • 米拓做的网站如何改代码网页设计规划
  • 合肥电子商务开发网站建设中美关系最新消息最新进展
  • 给私人企业做网站推广塘沽网络公司
  • 兰考县住房和城乡建设局网站创建一个网站流程
  • 银川市住房城乡建设局网站织梦网站地图底部
  • 重庆网站推广网络推广高级网页设计师证书
  • 邵阳营销型网站建设wordpress 不重定向
  • 建设网站需要什么硬件厦门大型企业网站开发公司
  • 广州黄埔做网站的公司哪家好驻马店北京网站建设
  • 企业网站搭建项目概述范文专业的家居行业网站开发
  • 公司网站怎么做才高大上236邮箱企业邮箱
  • 阿里巴巴跟建设网站的区别收款后自动发货的网站是怎么做的
  • 网页设计模板免费网站无锡百度
  • 网站建设费用明细微信端网站开发模板
  • 网站建设学习东西hermit wordpress
  • 和网站用户体验相关的文章wordpress音频报错
  • wordpress登录网站系统优化加速工具
  • 会计网站模板wordpress 在线qq
  • 网站开发毕设文献app制作工具下载
  • 自行建网站 所需费用28招商加盟网
  • 专业门户网站建设站优云seo优化
  • ?a品定制网站开发网站建设方案-奢侈品
  • 400元网站建设优化关键词排名提升
  • 17我们一起做网站wordpress 中文图片无法显示
  • 龙海市邦策网站建设平台百度提交网址多久才会收录
  • 网站建设公司有app推广之家
  • localhost怎么做网站wordpress用户管理
  • 如何做自己网站的seo拖拽网站开发
  • 吴江区城乡建设局网站nginx wordpress 伪静态