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

外贸公司网站建设费会计科目滁州建设网站

外贸公司网站建设费会计科目,滁州建设网站,武安城乡建设网站,怎样在wordpress后台添加产品参数#x1f4eb;作者简介#xff1a;小明Java问道之路#xff0c;2022年度博客之星全国TOP3#xff0c;专注于后端、中间件、计算机底层、架构设计演进与稳定性建设优化#xff0c;文章内容兼具广度、深度、大厂技术方案#xff0c;对待技术喜欢推理加验证#xff0c;就职于… 作者简介小明Java问道之路2022年度博客之星全国TOP3专注于后端、中间件、计算机底层、架构设计演进与稳定性建设优化文章内容兼具广度、深度、大厂技术方案对待技术喜欢推理加验证就职于知名金融公司后端高级工程师。             2022博客之星TOP3 | CSDN博客专家 | 后端领域优质创作者 | CSDN内容合伙人 InfoQ(极客邦)签约作者、阿里云专家 | 签约博主、51CTO专家 | TOP红人、华为云享专家            如果此文还不错的话还请关注、点赞、收藏三连支持一下博主~  文末获取联系    精彩专栏推荐订阅收藏 专栏系列点击解锁 学习路线点击解锁 知识定位 Redis从入门到精通与实战 Redis从入门到精通与实战 围绕原理源码讲解Redis面试知识点与实战 MySQL从入门到精通 MySQL从入门到精通 全面讲解MySQL知识与企业级MySQL实战 计算机底层原理 深入理解计算机系统CSAPP 以深入理解计算机系统为基石构件计算机体系和计算机思维 Linux内核源码解析 围绕Linux内核讲解计算机底层原理与并发 数据结构与企业题库精讲 数据结构与企业题库精讲 结合工作经验深入浅出适合各层次笔试面试算法题精讲 互联网架构分析与实战 企业系统架构分析实践与落地 行业最前沿视角专注于技术架构升级路线、架构实践 互联网企业防资损实践 互联网金融公司的防资损方法论、代码与实践 Java全栈白宝书 精通Java8与函数式编程 本专栏以实战为基础逐步深入Java8以及未来的编程模式 深入理解JVM 详细介绍内存区域、字节码、方法底层类加载和GC等知识 深入理解高并发编程 深入Liunx内核、汇编、C全方位理解并发编程 Spring源码分析 Spring核心七IOC/AOP等源码分析 MyBatis源码分析 MyBatis核心源码分析 Java核心技术 只讲Java核心技术 本文目录 本文导读 一、什么是volatile 二、volatile 的使用场景 三、什么是 happens-before 关系 四、volatile 的原理 1、可见性lock 前缀的指令 2、禁止重排内存屏障 五、volatile 和 synchronized 的关系 六、单例双重检查锁模式中为什么要 volatile 总结 本文导读 本文深入浅出讲解了什么是volatile与volatile 的使用场景对什么是 happens-before 关系进行不同场景分析最后分析volatile 可见性lock指令与禁止重排内存屏障的原理最后给出两道常见面试题“volatile 和 synchronized 的关系”、“单例双重检查锁模式中为什么要 volatile”作为本文扩展。 一、什么是volatile volatile 是轻量级的 synchronized它在多处理器开发中保证了共享变量的“可见性”。可见性的意思是 volatile 修饰的变量对所有线程总数立即可见的对volatile变量的所有写操作总是能立刻反应到其他线程中。 好处比 synchronized 的使用和执行成本会更低因为它不会引起线程上下文的切换和调度。 volatile 保证可见性和禁止重排序无法保证原子性。Java 提供 volatile 来保证一定的有序性。最著名的例子就是单例模式里面的双重检查锁。重排序它不会影响单线程的运行结果但是对多线程会有影响。 二、volatile 的使用场景 通常情况volatile 用来修饰 boolean 类型的标记位因为对于标记位来讲直接的赋值操作本身就是具备原子性的再加上 volatile 保证了可见性那么就是线程安全的了。 对于多个线程同时操作的的场景不仅仅是一个简单的赋值操作而是需要先读取当前的值然后在此基础上进行一定的修改再把它给赋值回去。这样一来我们的 volatile 就不足以保证这种情况的线程安全了。 三、什么是 happens-before 关系 happens-before该原则保证了程序的“有序性”它规定如果两个操作的执行顺序无法从 happens-before 原则中推到出来那么他们就不能保证有序性可以随意进行重排序。 也就是说一个线程对于变量的操作需要对另一线程对于变量的操作可见一定存在happens-before 关系 · 程序顺序原则即在一个线程内必须保证语义串行性也就是说按照代码顺序执行。 · 锁规则解锁(unlock)操作必然发生在后续的同一个锁的加锁(lock)之前也就是说如果对于一个锁解锁后再加锁那么加锁的动作必须在解锁动作之后(同一个锁)。 · volatile规则volatile变量的写先发生于读这保证了volatile变量的可见性简单的理解就是volatile变量在每次被线程访问时都强迫从主内存中读该变量的值而当该变量发生变化时又会强迫将最新的值刷新到主内存任何时刻不同的线程总是能够看到该变量的最新值。 · 线程启动规则线程的start()方法先于它的每一个动作即如果线程A在执行线程B的start方法之前修改了共享变量的值那么当线程B执行start方法时线程A对共享变量的修改对线程B可见 传递性 A先于B B先于C 那么A必然先于C · 线程终止规则线程的所有操作先于线程的终结Thread.join()方法的作用是等待当前执行的线程终止。假设在线程B终止之前修改了共享变量线程A从线程B的 join方法成功返回后线程B对共享变量的修改将对线程A可见。 · 线程中断规则对线程 interrupt()方法的调用先行发生于被中断线程的代码检测到中断事件的发生可以通过Thread.interrupted()方法检测线程是否中断。 · 对象终结规则对象的构造函数执行结束先于finalize()方法 四、volatile 的原理 1、可见性lock 前缀的指令 第一层的作用是保证可见性。Happens-before 关系中对于 volatile 是这样描述的对一个 volatile 变量的写操作 happen-before 后面对该变量的读操作。 这就代表了如果变量被 volatile 修饰那么每次修改之后接下来在读取这个变量的时候一定能读取到该变量最新的值。 内存屏障Memory Barrier的另外一个作用是强制刷出各种CPU的缓存数据因此任何CPU上的线程都能读取到这些数据的最新版本。 对 Volatile 进行写操作 CPU 会在有 volatile 变量修饰的共享变量进行写操作的时候多lock汇编代码。 lock 前缀的指令在CPU中会引发了两件事情一、将当前处理器缓存行的数据会写回到系统内存。二、这个写回内存的操作会引起在其他 CPU 里缓存了该内存地址的数据无效。 2、禁止重排内存屏障 第二层的作用就是禁止重排序。先介绍一下 as-if-serial语义不管怎么重排序单线程程序的执行结果不会改变。在满足 as-if-serial 语义的前提下由于编译器或 CPU 的优化代码的实际执行顺序可能与我们编写的顺序是不同的这在单线程的情况下是没问题的但是一旦引入多线程这种乱序就可能会导致严重的线程安全问题。 用了 volatile 关键字就可以在一定程度上禁止这种重排序。 volatile变量正是通过内存屏障实现其在内存中的语义即可见性和禁止重排优化 1、在每个volatile写操作的前面插入一个StoreStore使对于变量写操作的后面的写操作不会重排序到前面 2、在每个volatile写操作的后面插入一个StoreLoad使对于变量读操作的后面的写操作不会重排序到前面 3、在每个volatile读操作的后面插入一个LoadLoad使对于变量读操作的后面的读操作不会重排序到前面 4、在每个volatile读操作的后面插入一个LoadStore使对于变量写操作的后面的读操作不会重排序到前面 五、volatile 和 synchronized 的关系 相似性volatile 可以看作是一个轻量版的 synchronized比如一个共享变量如果自始至终只被各个线程赋值和读取而没有其他操作的话那么就可以用 volatile 来代替 synchronized 或者代替原子变量足以保证线程安全。 实际上对 volatile 字段的每次读取或写入都类似于“半同步”——读取 volatile 与获取 synchronized 锁有相同的内存语义而写入 volatile 与释放 synchronized 锁具有相同的语义。 性能方面volatile 属性的读写操作都是无锁的正是因为无锁所以不需要花费时间在获取锁和释放锁上所以比 synchronized 性能更好。 六、单例双重检查锁模式中为什么要 volatile public class Singleton {private static volatile Singleton singleton;public static Singleton getInstance() {if (singleton  null) {synchronized (Singleton.class) {if (singleton  null) {singleton  new Singleton();}}}return singleton;} }主要就在于 singleton new Singleton() 它并非是一个原子操作在 JVM 中上述语句至少做了以下这 3 件事因为存在指令重排序的优化也就是说第2 步和第 3 步的顺序是不能保证的。 总结 本文深入浅出讲解了什么是volatile与volatile 的使用场景对什么是 happens-before 关系进行不同场景分析最后分析volatile 可见性lock指令与禁止重排内存屏障的原理最后给出两道常见面试题“volatile 和 synchronized 的关系”、“单例双重检查锁模式中为什么要 volatile”作为本文扩展。
http://www.zqtcl.cn/news/562996/

相关文章:

  • 建和做网站网络营销推广可以理解为
  • 太原市网站建设网站人防工程做资料的网站
  • 怎么做免费推广网站做网站第一部
  • 橙色网站后台模板WordPress的SEO插件安装失败
  • 做网站好还是做微信小程序好外包加工网外放加工活
  • 中国建设银行网站查征信电子商务网站建设及推广
  • 扫描网站漏洞的软件php网站后台验证码不显示
  • 诸城哪里有做网站的做网站的尺寸
  • 网站开发参考书目做网站推广赚钱吗
  • 九度网站建设网站做ppt模板
  • 浙江做公司网站多少钱评论回复网站怎么做
  • 江门网络建站模板虚拟主机价格一般多少钱
  • 网站建设公司云南深圳手机商城网站设计费用
  • 汇泽网站建设网页版快手
  • 手机销售培训网站wordpress案例插件
  • 滨江道做网站公司wordpress 花瓣网
  • 如何建网站快捷方式软件开发做平台
  • 常见的静态网页深圳罗湖企业网站优化
  • 做网站一天赚多少钱外贸网站建设排名
  • 一个大型网站建设得多少钱百度成都总部
  • 网站制作公司汉狮网络手机版网站优化
  • 铜川做网站logo 图标 设计
  • 如何做网站的注册页面南京宣传片公司有哪些
  • 中国建设机械教育协会网站网站建设中html中关于图片显示的标签有哪些
  • 网站过期后dede减肥网站源码
  • 营销型 手机网站网站建设方案后期服务
  • 怎么做一个个人网站建网站的八个步骤
  • 淘宝导购网站模版上海网站推广软件
  • 做影视网站引流湖北响应式网站建设费用
  • 网站统计cnzz网站空间有哪些