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

电商营业执照怎么办seochan是什么意思

电商营业执照怎么办,seochan是什么意思,网站备案证图片,制作一个官网写在开头 在之前的学习我们了解到#xff0c;为了充分利用缓存#xff0c;提高程序的执行速度#xff0c;编译器在底层执行的时候#xff0c;会进行指令重排序的优化操作#xff0c;但这种优化#xff0c;在有些时候会带来 有序性 的问题。 那何为有序性呢#xff1f;…写在开头 在之前的学习我们了解到为了充分利用缓存提高程序的执行速度编译器在底层执行的时候会进行指令重排序的优化操作但这种优化在有些时候会带来 有序性 的问题。 那何为有序性呢我们可以通俗理解为程序执行的顺序要按照代码的先后顺序。 当然之前我们还说过发生有序性问题时我们可以通过给变量添加volatile修饰符进行解决。那么今天我们继续学习一起探讨一下volatile与指令重排之间的冤家路窄 有序性问题 首先我们来回顾一下之前写的一个关于有序性问题的测试类。 【代码示例1】 int a 1;(1) int b 2;(2) int c a b;(3)上面的这段代码中c变量依赖ab的值因此在编译器优化重排时c肯定会在ab赋值以后执行但ab之间没有依赖关系可能会发生重排序但这种重排序即便到了多线程中依旧不会存在问题因为即便重排对执行结果也无影响。 但有些时候指令重排序可以保证串行语义一致但是没有义务保证多线程间的语义也一致我们继续看下面这段代码 【代码示例2】 public class Test {private static int num 0;private static boolean ready false;//禁止指令重排解决顺序性问题//private static volatile boolean ready false;public static class ReadThread extends Thread {Overridepublic void run() {while (!Thread.currentThread().isInterrupted()) {if (ready) {//(1)System.out.println(num num);//(2)}System.out.println(读取线程...);}}}public static class WriteRead extends Thread {Overridepublic void run() {num 2;//(3)ready true;//(4)System.out.println(赋值线程...);}}public static void main(String[] args) throws InterruptedException {ReadThread rt new ReadThread();rt.start();WriteRead wr new WriteRead();wr.start();Thread.sleep(10);rt.interrupt();System.out.println(rt stop...);} }我们定义了2个线程一个用来求和操作一个用来赋值操作因为定义的是成员变量所以代码1234之间不存在依赖关系在运行时极可能发生指令重排序如将4在3前执行顺序为4132这时输出的就是0而不是4但在很多性能比较好的电脑上这种重排序情况不易复现。 这时我们给ready 变量添加一个volatile关键字就成功的解决问题了。 原因解析 volatile关键字可以禁止指令重排的原因主要有两个 一、3 个 happens-before 规则的实现 对一个 volatile 变量的写 happens-before 任意后续对这个 volatile 变量的读一个线程内按照程序代码顺序书写在前面的操作先行发生于书写在后面的操作happens-before 传递性A happens-before BB happens-before C则 A happens-before C。 二、内存屏障 变量声明为 volatile 后在对这个变量进行读写操作的时候会通过插入特定的 内存屏障 的方式来禁止指令重排序。 内存屏障(Memory Barrier 又称内存栅栏是一个 CPU 指令)为了实现volatile 内存语义volatile 变量的写操作在变量的前面和后面分别插入内存屏障volatile 变量的读操作是在后面插入两个内存屏障。 具体屏障规则 在每个 volatile 写操作的前面插入一个 StoreStore 屏障在每个 volatile 写操作的后面插入一个 StoreLoad 屏障在每个 volatile 读操作的后面插入一个 LoadLoad 屏障在每个 volatile 读操作的后面插入一个 LoadStore 屏障。 屏障说明 StoreStore禁止之前的普通写和之后的 volatile 写重排序StoreLoad禁止之前的 volatile 写与之后的 volatile 读/写重排序LoadLoad禁止之后所有的普通读操作和之前的 volatile 读重排序LoadStore禁止之后所有的普通写操作和之前的 volatile 读重排序。 OK知道了这些内容之后我们再回头看代码示例2中增加了volatile关键字后的执行顺序在赋值线程启动后执行顺序会变成3412这时打印的结果就为4啦 volatile为什么不能保证原子性 我们讲完了volatile修饰符保证可见性与有序性的内容接下来我们思考另外一个问题它能够保证原子性吗为什么我们依旧通过一段代码去证明一下 【代码示例3】 public class Test {//计数变量static volatile int count 0;public static void main(String[] args) throws InterruptedException {//线程 1 给 count 加 10000Thread t1 new Thread(() - {for (int j 0; j 10000; j) {count;}System.out.println(thread t1 count 加 10000 结束);});//线程 2 给 count 加 10000Thread t2 new Thread(() - {for (int j 0; j 10000; j) {count;}System.out.println(thread t2 count 加 10000 结束);});//启动线程 1t1.start();//启动线程 2t2.start();//等待线程 1 执行完成t1.join();//等待线程 2 执行完成t2.join();//打印 count 变量System.out.println(count);} }我们创建了2个线程分别对count进行加10000操作理论上最终输出的结果应该是20000万对吧但实际并不是我们看一下真实输出。 输出 thread t1 count 加 10000 结束 thread t2 count 加 10000 结束 14281原因 Java 代码中 的 count并非原子的而是一个复合性操作至少需要三条CPU指令 指令 1把变量 count 从内存加载到CPU的寄存器指令 2在寄存器中执行 count 1 操作指令 31 后的结果写入CPU缓存或内存 即使是单核的 CPU当线程 1 执行到指令 1 时发生线程切换线程 2 从内存中读取 count 变量此时线程 1 和线程 2 中的 count 变量值是相等都执行完指令 2 和指令 3写入的 count 的值是相同的。从结果上看两个线程都进行了 count但是 count 的值只增加了 1。这种情况多发生在cpu占用时间较长的线程中若单线程对count仅增加100那我们就很难遇到线程的切换得出的结果也就是200啦。 要想解决也很简单利用 synchronized、Lock或者AtomicInteger都可以我们在后面的文章中会聊到的请继续保持关注哦 结尾彩蛋 如果本篇博客对您有一定的帮助大家记得留言点赞收藏呀。原创不易转载请联系Build哥 如果您想与Build哥的关系更近一步还可以关注“JavaBuild888”在这里除了看到《Java成长计划》系列博文还有提升工作效率的小笔记、读书心得、大厂面经、人生感悟等等欢迎您的加入
http://www.zqtcl.cn/news/394023/

相关文章:

  • Soho外贸常用网站wordpress下不了插件吗
  • 企业网站建设小技巧有哪些WordPress网站小程序
  • 公司招聘网站续费申请seo编辑是干什么的
  • 58同城泉州网站建设人工投票平台app
  • dede 网站地图 插件网站引导页flash
  • 聊城做网站的公司渠道网站总体结构
  • 北京比较大的网站建设公司wap网站引导页特效
  • 做关于植物的网站即墨网站设计
  • 怎么提升网站收录商品网页制作
  • 做网站建设的平台wordpress5.0发布
  • 站长工具a级查网站域名
  • 免费做网站电话手机开发者模式打开有什么影响
  • 上海免费网站建站模板毕节做网站优化
  • 影响网站建设的关键点手机网站制作app
  • 商务网站建设的流程深圳模板网站建设案例
  • 做中英文网站多少钱方维制网站
  • 做一个信息发布网站要多少钱开发小程序多少钱一个
  • 山东网站设计网站关键词设置技巧
  • 做网站服务怎么赚钱产品展示型的网站功能有哪些
  • 丹东网站制作宁波网站建设公司制作网站
  • 南宁建设工程质量网站九江网站建设九江
  • 永州市住房和城乡建设厅网站服务器可以做几个网站
  • 哪里学网站建设与管理做移动端电影网站
  • 境外企业网站推广大冶市建设局网站
  • 户网站建设的不全.阿里巴巴国际站
  • 定制手机壳的网站能在家做的兼职的网站
  • 温州营销型网站建设郴州网络推广公司
  • asp.net 做网站源代码网站怎么做配置文件夹
  • 网站建设云尚网络wordpress首页flash
  • 北京优化网站宁波网络营销策划公司