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

上海最专业的集团网站建设wordpress禁用新编辑器

上海最专业的集团网站建设,wordpress禁用新编辑器,建设工程网站有哪些,画册设计理念和设计思路可见性: 什么是可见性: 可见性是指在数据在收到一个线程的修改时,其他的线程也可以得知并获取修改后的值的属性。这是并发编程的三大特性之一。 为了提高cpu的利用率,cpu在获取数据时,不是直接在主内存读取数据&…

可见性:

什么是可见性:

可见性是指在数据在收到一个线程的修改时,其他的线程也可以得知并获取修改后的值的属性。这是并发编程的三大特性之一。

为了提高cpu的利用率,cpu在获取数据时,不是直接在主内存读取数据,而是在告诉缓存里面,但是在多核CPU下,每个CPU的高速缓存是独立的,也就造成了如果CPU修改自己高速缓存的内容,但是数据没有同步给主内存或这是其他缓存,就造成了数据的不一致。

cpu的高速缓存:

  • CPU为了提高速率会首先在高速缓存里面查找数据,如果高速缓存里面没有数据,再去主内存里面查找数据。

  • 从缓存1到缓存3,存储的内容主键变大,但是查询速度变小。

图解可见性问题:

在初始阶段,我们的i=0 ,但是CPU1将数据改为1,如果没有可见性,主内存和其他的告诉缓存并不会知道数据改变,这样的话,计算的结构就会出现错误。

代码演示可见性问题

//演示可见性问题就是在修改了一个值之后,我们的另一个现成的数据并没有改变。

如果没有可见性的问题,那么只要是修改一个值的话,这个之就会被所有的使用者感知到他的变化,不会出现程序中的状况

如何解决可见性问题

1.volatile
  • 当变量被volatile修饰之后这个变量的读写都会变得很特别,对于可见性来说,被他修饰的变量的改变可以被任意的使用这个变量的线程感知。

  • volatile的读操作:在读取被volatile修饰的变量是,CPU会直接在主内存模块去读取,在高速缓存中的变量的值会被标记为不可用,所以每个CPU读取的值都是相同的。

  • volatile的写操作:对于volatile修饰的变量的写操作,他会将缓存中的修改的共享变量的值及时的刷新到主内存。

添加了volatile的变量再转为汇编语言时,会追加一个指令,这个指令就是规定了使用volatile的变量在写入时是直接写入主内存,并且这个临界变量在缓存中的值都不在有效,需要在主内存中重新读取。

2.synchronized

在程序添加synchronized关键字之后,会将CPU高速缓存中将带有synchronized关键字的代码块和方法里面的变量移除。重新在主内存中加载。在释放所之后,将这个变量直接同步到主内存。

在这里小编要提醒一下:变量移除时值得所有CPU缓存的变量都会被移除。

3.ReentranLock

我们在讲解这个之前不如去看一下ReentranLock的源码:在源码里面我们发现他其实时使用了volatile关键字。

4.final

在只是进行读取的数据里面是不会发生可见性到问题的,也就是说如果变量被修饰的话,因为是不可变的,也就是不会发生可见性问题。

提示:在java里面,volitile是不能与共同修饰一个变量的。

有序性:

CPU在执行指令时为了让指令可以快速地执行,会进行指令重排,但是指令重排之后的代码会出现有序性的问题。

有序性定义:

大家都知道我们的java是乱序执行的。但是在多线程的时候,乱序执行就会造成数据的问题。下面小编用代码演示一下:

代码演示有序性:

 private 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);}}}

在这段代码中,可能会出现输出每个都是零的时候,证明了java会指令重排。

解决有序性问题:

have 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方法调用。

volatile

volatile可以解决可见性和有序性问题,他是通过内存屏障的方式来解决指令重拍的问题。在两个指令之间加上一个指令,避免进行指令的重新排序。

http://www.yayakq.cn/news/226184/

相关文章:

  • 永久域名免费注册网站万能网页视频下载
  • 云端智能建站系统wordpress功能菜单怎么设置
  • 如何制作网站教程视频讲解在百度网上做广告需要多少钱
  • 深圳物流公司网站wordpress 自建主题
  • 网站描述怎么写利于seo江苏齐力建设集团网站
  • 浅谈高校门户网站建设的规范标准怀化建设企业网站
  • 企业网站源码html东莞正规的企业网站设计多少钱
  • 做网站用html5wordpress地理定位
  • 网站商城开发一个多少钱做免费的视频网站可以赚钱吗
  • 东莞企石网站建设wordpress啥意思
  • 怎么做淘宝客网站页面在QQ上做cpa网站说是恶意的
  • 游戏网站建设上海歌舞娱乐场所停业
  • 庐山市建设规划局网站个人网站如何备企业
  • 网站优化软件破解版网页美工兼职
  • 免费网站建设平台 iis珠海做网站需要多少钱
  • 网站做301跳转建设网站科目
  • 大人小孩做网站王烨然
  • 天津平台网站建设费用wordpress获取某分类下最新文章
  • 大连微信网站手机开发者模式怎么调成高性能
  • 响应式做的好的网站icp网站快速案
  • 做平团的网站报价平台
  • 网站域名备案信息查询宏发建设有限公司网站
  • 马鞍山网站建设方案网站卖东西怎么做的
  • 终身免费建站seo是什么公司
  • 银川网站建设有哪些大淘客cms网站怎么做
  • 抢注域名网站Wordpress本地打开就很慢
  • 俄罗斯乌克兰死亡人数win7优化大师下载
  • 网站开发流程 原型设计吉林市网站制作哪家好
  • 设计的有趣的网站基于mvc4商务网站开发
  • 广告网站设计公司好吗网页设计模板图片html