攀枝花市建设银行网站在线制作图片及图片处理工具免费

web/2025/10/6 19:01:01/文章来源:
攀枝花市建设银行网站,在线制作图片及图片处理工具免费,移动端软件开发,wordpress原生html5播放器2 可见性 2.1 什么是可见性 可见性问题是基于CPU位置出现的#xff0c;CPU处理速度非常快#xff0c;相对CPU来说#xff0c;去主内存获取数据这个事情太慢了#xff0c;CPU就提供了 L1#xff0c;L2#xff0c;L3的三级缓存#xff0c;每次去主内存拿完数据后#x…2 可见性 2.1 什么是可见性 可见性问题是基于CPU位置出现的CPU处理速度非常快相对CPU来说去主内存获取数据这个事情太慢了CPU就提供了 L1L2L3的三级缓存每次去主内存拿完数据后就会存储到CPU的三级缓存每次去三级缓存拿数据效率肯定会提升。 这就带来了问题现在CPU都是多核每个线程的工作内存CPU三级缓存都是独立的会告知每个线程中做修改时只改自 己的工作内存没有及时的同步到主内存导致数据不一致问题。 [image] 可见性问题的代码逻辑 private static boolean flag true; public static void main(String[] args) throws InterruptedException { Thread t1 new Thread(() - { while (flag) { // .... }System.out.println(t1线程结束); }); t1.start(); Thread.sleep(10); flag false; System.out.println(主线程将flag改为false); } 2.2 解决可见性的方式 2.2.1 volatile volatile是一个关键字用来修饰成员变量。 如果属性被volatile修饰相当于会告诉CPU对当前属性的操作不允许使用CPU的缓存必须去和主内存操作volatile的内存语义 ● volatile属性被写当写一个volatile变量JMM会将当前线程对应的CPU缓存及时的刷新到主内存中 ● volatile属性被读当读一个volatile变量JMM会将对应的CPU缓存中的内存设置为无效必须去主内存中重新读取共享变 量 其实加了volatile就是告知CPU对当前属性的读写操作不允许使用CPU缓存加了volatile修饰的属性会在转为汇编之后 后追加一个lock的前缀CPU执行这个指令时如果带有lock前缀会做两个事情 ● 将当前处理器缓存行的数据写回到主内存 ● 这个写回的数据在其他的CPU内核的缓存中直接无效。 总结volatile就是让CPU每次操作这个数据时必须立即同步到主内存以及从主内存读取数据。 private volatile static boolean flag true; public static void main(String[] args) throws InterruptedException { Thread t1 new Thread(() - { while (flag) { // .... } System.out.println(t1线程结束); }); t1.start(); Thread.sleep(10); flag false; System.out.println(主线程将flag改为false); } 2.2.2 synchronized synchronized也是可以解决可见性问题的synchronized的内存语义。 如果涉及到了synchronized的同步代码块或者是同步方法获取锁资源之后将内部涉及到的变量从CPU缓存中移除必须去主 内存中重新拿数据而且在释放锁之后会立即将CPU缓存中的数据同步到主内存。 private static boolean flag true; public static void main(String[] args) throws InterruptedException { Thread t1 new Thread(() - { while (flag) { synchronized (MiTest.class){ //... } System.out.println(111); } System.out.println(t1线程结束); }); t1.start(); Thread.sleep(10); flag false; System.out.println(主线程将flag改为false); } 2.2.3 Lock Lock锁保证可见性的方式和synchronized完全不同synchronized基于他的内存语义在获取锁和释放锁时对CPU缓存做一个 同步到主内存的操作。 Lock锁是基于volatile实现的。Lock锁内部再进行加锁和释放锁时会对一个由volatile修饰的state属性进行加减操作。 如果对volatile修饰的属性进行写操作CPU会执行带有lock前缀的指令CPU会将修改的数据从CPU缓存立即同步到主内存 同时也会将其他的属性也立即同步到主内存中。还会将其他CPU缓存行中的这个数据设置为无效必须重新从主内存中拉取。 private static boolean flag true; private static Lock lock new ReentrantLock(); public static void main(String[] args) throws InterruptedException { Thread t1 new Thread(() - { while (flag) { lock.lock(); try{ //... }finally { lock.unlock(); } } System.out.println(t1线程结束); }); t1.start(); Thread.sleep(10); flag false; System.out.println(主线程将flag改为false); } 2.2.4 final final修饰的属性在运行期间是不允许修改的这样一来就间接的保证了可见性所有多线程读取final属性值肯定是一样。 final并不是说每次取数据从主内存读取他没有这个必要而且final和volatile是不允许同时修饰一个属性的 final修饰的内容已经不允许再次被写了而volatile是保证每次读写数据去主内存读取并且volatile会影响一定的性能就不需要同时修饰。 3 有序性 3.1 什么是有序性 在Java中.java文件中的内容会被编译在执行前需要再次转为CPU可以识别的指令CPU在执行这些指令时为了提升执行 效率在不影响最终结果的前提下满足一些要求会对指令进行重排。 指令乱序执行的原因是为了尽可能的发挥CPU的性能。 Java中的程序是乱序执行的。 Java程序验证乱序执行效果 static int a,b,x,y; public static void main(String[] args) throws InterruptedException {for (int i 0; i Integer.MAX_VALUE; i) { a 0; b 0; x 0; y 0; Thread t1 new Thread(() - { a 1; x b; }); Thread t2 new Thread(() - { b 1; y a; }); t1.start(); t2.start(); t1.join(); t2.join(); if(x 0 y 0){ System.out.println(第 i 次x x ,y y); } } } 单例模式由于指令重排序可能会出现问题 线程可能会拿到没有初始化的对象导致在使用时可能由于内部属性为默认值导致出现一些不必要的问题 private static volatile MiTest test; private MiTest(){} public static MiTest getInstance(){ // B if(test null){ synchronized (MiTest.class){ if(test null){ // A , 开辟空间test指向地址初始化 test new MiTest(); } } } return test; } 3.2 as-if-serial as-if-serial语义 不论指定如何重排序需要保证单线程的程序执行结果是不变的。 而且如果存在依赖的关系那么也不可以做指令重排。 // 这种情况肯定不能做指令重排序 int i 0; i; // 这种情况肯定不能做指令重排序 int j 200; j * 100; j 100; // 这里即便出现了指令重排也不可以影响最终的结果20100 3.3 happens-before 具体规则    1. 单线程happen-before原则在同一个线程中书写在前面的操作happen-before后面的操作。 2. 锁的happen-before原则同一个锁的unlock操作happen-before此锁的lock操作。    3. volatile的happen-before原则 对一个volatile变量的写操作happen-before对此变量的任意操作。    4. happen-before的传递性原则 如果A操作 happen-before B操作B操作happen-before C操作那么A操作happen-before C操作。    5. 线程启动的happen-before原则同一个线程的start方法happen-before此线程的其它方法。  6. 线程中断的happen-before原则对线程interrupt方法的调用happen-before被中断线程的检测到中断发送的代码。    7. 线程终结的happen-before原则线程中的所有操作都happen-before线程的终止检 测。    8. 对象创建的happen-before原则一个对象的初始化完成先于他的finalize方法调用。 JMM只有在不出现上述8中情况时才不会触发指令重排效果。 不需要过分的关注happens-before原则只需要可以写出线程安全的代码就可以了。 3.4 volatile 如果需要让程序对某一个属性的操作不出现指令重排除了满足happens-before原则之外还可以基于volatile修饰属性从而对 这个属性的操作就不会出现指令重排的问题了。 volatile如何实现的禁止指令重排 内存屏障概念。将内存屏障看成一条指令。 会在两个操作之间添加上一道指令这个指令就可以避免上下执行的其他指令进行重排序。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/88066.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网站怎么制作成软件做网站基础源代码

1、QT通信机制为了更好的实现QT的信息交互,在QT系统中创建了较为完善的通信机制。QT的通信可分为QT内部通信和外部通信两大类。对于这两类通信机制及应用场合做如以下分析:(1)QT内部对象间通信在图形用户界面编程中,经常需要将一个窗口部件的…

淘宝客网站一定要备案视觉设计网站

Xsens动作捕捉技术助力于中国戏曲演员运动分析 搜维尔科技:Movella Xsens动作捕捉技术助力于中国戏曲演员运动分析

十大免费建站app怎样做网站初中生

目录 一,项目介绍 1.1 关于高并发内存池 1.2 关于池化技术 1.3 关于malloc 二,定长内存池实现 2.1 实现详情 ​2.2 完整代码 三,高并发内存池整体设计 四,threadcache设计 4.1 整体设计 4.2 哈希桶映射对齐规则 4.3 …

微信运营网站建设销售网站开发的背景

#做题方法# 进去之后做了简单的注入发现有错误回显,就进行注入发现过滤了sql语 后面进行了双写and payload: ?usernameadmin%27%20aandnd%20updatexml(1,concat(0x7e,dAtabase(),0x7e,version()),1)%20--&passwordadmi 接下来又 ?usernameadm…

和17做网店类似的货源网站外包公司催收合法吗

IDEA 中,"Scratches and Consoles" 是一个用于临时代码编辑和交互式开发的工具窗口,作用如下:Scratches(草稿):Scratches 是一个用于临时编写和运行代码片段的工具,你可以在其中创建临…

网站后台中表格制作网络广告的形式

卧龙吟有所有特性是没有详细说明或者说容易被大家忽视的,这些都是需要我们去挖掘的,对此,特意奉上辟邪剑谱一本。一,四季系统卧龙吟的时间轴系统中不仅仅是XX年开始可以国战,XX年开始海盗入侵,还有喜闻乐见…

网站有利于seo的细节dw网站导航怎么做

编者按:巨灾项目,作为国家公共安全体系的重要组成部分,对于提升我国防灾减灾能力具有举足轻重的意义。其中,地震预警作为巨灾项目的重要一环,其技术的创新与应用直接关系到人民群众的生命财产安全。云轴科技ZStack在国…

呼家楼做网站的公司哪家好2017网站开发发展前景

实例对象和构造函数的关系及原型: 实例对象是通过构造函数创建出来的,实例对象的构造器constructor就是指向构造函数的;每个实例对象中的同一方法的指向是各不相同的,但是其属性值相同的属性可以相同,这样会造成内存浪…

做网站建设的公司有哪些网页设计免费模板参考网页

文章目录 四大核心复习一、获取模块内的state数据1.目标:2.使用模块中的数据3.代码示例 二、获取模块内的getters数据1.目标:2.语法:3.代码演示 三、获取模块内的mutations方法1.目标:2.注意:3.调用方式:4.…

网站挂马解决池州网站建设

PC上不了网初步排查方案步骤 首先查看配置是否正确,是否使用自动获取(DHCP)IP,掩码,网关,如果不是,手动配置确认网关,子网掩码,IP是否配置正确,IP是否已有PC使…

什么是多页面网站wordpress调用分类描述

一,前言 RabbitMQ是由erlang语言开发,基于AMQP(Advanced Message Queue 高级消息队列协议)协议实现的消息队列,它是一种应用程序之间的通信方法,消息队列在分布式系统开发中应用非常广泛。点击跳转RabbitM…

泗洪县建设局网站怎么查不到专业团队高清图片

前言hfish HFish是一款社区型免费蜜罐,侧重企业安全场景,从内网失陷检测、外网威胁感知、威胁情报生产三个场景出发,为用户提供可独立操作且实用的功能,通过安全、敏捷、可靠的中低交互蜜罐增加用户在失陷感知和威胁情报领域的能力。 HFish具有超过40种蜜罐环境、提供免费…

做服装零售上什么网站沈阳企业自助建站系统

Sky Guide是一款能让小伙伴们观察银河的手机软件,尤其是喜欢行星、星座的小伙伴们来讲,这款软件能很好的帮助小伙伴们观看这些,让小伙伴们体验不一样的观星乐趣,因此想要观看的小伙伴们,赶紧来试试吧。软件介绍&#x…

网站群 米拓互联网家装平台有哪些

本文作者:徐晓伟 GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。 本文主要讲述了在极狐GitLab 用户…

网站开发岗位职责网站维护需要做那些事

来源:国机智能机器人曾为现代互联网早期协议和架构设计做出贡献的Vint Cerf,用一个寓言来解释为什么在人工智能等新兴技术出现后,勇敢的领导力至关重要。想象一下,你住在一个被群山环绕的山谷底部的小社区里。在远处的山顶上有一块…

医院网站建设作用中国4台根服务器地点

表单 表单输入绑定 只需要v-model声明一下这个变量就可以。 还可以选择不同的类型&#xff0c;例如 type"checkbox“ v-model 也提供了 lazy、number、.trim 功能&#xff0c;只需要在v-model后面加入.lazy 例如&#xff1a;v-model.lazy”message“ <template><…

名片型网站开发网站首页面

大家都知道java中有很多的基础知识&#xff0c;需要大家花费一定的时间去消化。关于java中ConcurrentHashMap的扩容机制不知道大家是否了解过&#xff0c;其实内容也是很好理解的&#xff0c;一起来看看吧。首先&#xff0c;我们需要知道的是&#xff1a;1. 计算每个线程可以处…

四个平台建设网站不显示图片网络运维工程师年终总结

此章节偏理论知识 对于小一点的项目 比如说角色都是平级的 那我们直接像之前 vue2.x项目从0到1&#xff08;二&#xff09;之后台管理侧边栏&#xff08;动态渲染路由以及高亮&#xff09;_vue动态渲染侧边栏_关忆北_的博客-CSDN博客这样渲染就行了 但是一旦项目大了 …

怎样自己建设网站代理记账公司收费表

查看自己系统的版本 必须运行 Windows 10 版本 2004 及更高版本&#xff08;内部版本 19041 及更高版本&#xff09;或 Windows 11 才能使用以下命令 在设置&#xff0c;系统里面就能看到 开启windows功能 直接winQ搜 开启hyber-V、使用于Linux的Windows子系统、虚拟机平…

网站关键词全国各地的排名情况网站栏目标题

Ubuntu conda环境迁移&#xff08;conda-pack&#xff09; 方法一&#xff1a;压缩拷贝方法二&#xff1a;conda-pack 在一台电脑配置好conda虚拟环境后&#xff0c;若在其它电脑需要同样的环境&#xff0c;可通过如下两种方式进行迁移。 方法一&#xff1a;压缩拷贝 找到Ubu…