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

做美食原创视频网站微信小程序开店

做美食原创视频网站,微信小程序开店,泰安招聘信息最新招聘2022,天津网站开发价格再来重复下八大原则#xff1a; 单线程happen-before原则#xff1a;在同一个线程中#xff0c;书写在前面的操作happen-before后面的操作。锁的happen-before原则#xff1a;同一个锁的unlock操作happen-before此锁的lock操作。volatile的happen-before原则#xff1a;对…再来重复下八大原则 单线程happen-before原则在同一个线程中书写在前面的操作happen-before后面的操作。锁的happen-before原则同一个锁的unlock操作happen-before此锁的lock操作。volatile的happen-before原则对一个volatile变量的写操作happen-before对此变量的任意操作(当然也包括写操作了)。happen-before的传递性原则如果A操作 happen-before B操作B操作happen-before C操作那么A操作happen-before C操作。线程启动的happen-before原则同一个线程的start方法happen-before此线程的其它方法。线程中断的happen-before原则对线程interrupt方法的调用happen-before被中断线程的检测到中断发送的代码。线程终结的happen-before原则线程中的所有操作都happen-before线程的终止检测。对象创建的happen-before原则一个对象的初始化完成先于他的finalize方法调用。 首先在看本文前最好先看下《java并发编程实战》之java内存模型这篇文章对java内存模型有个了解。 happen-before 在这里不能理解成在什么之前发生它和时间没有任何关系。个人感觉解释成“生效可见于” 更准确。下面通过对这八个原则详细解释来加深对“生效可见于”的理解。 在同一个线程中书写在前面的操作happen-before后面的操作 好多文章把这理解成书写在前面先发生于书写在后面的代码但是指令重排序确实可以让书写在后面的代码先于书写在前面的代码发生。这是里把happen-before 理解成“先于什么发生”其实happen-beofre在这里没有任何时间上的含义。比如下面的代码 int a 3; //1 int b a 1; //2这里 //2 对b赋值的操作会用到变量a那么java的“单线程happen-before原则”就保证 //2的中的a的值一定是3而不是05,等其他乱七八糟的值因为//1 书写在//2前面, //1对变量a的赋值操作对//2一定可见。因为//2 中有用到//1中的变量a再加上java内存模型提供了“单线程happen-before原则”所以java虚拟机不许可操作系统对//1 //2 操作进行指令重排序即不可能有//2 在//1之前发生。但是对于下面的代码 int a 3; int b 4;两个语句直接没有依赖关系所以指令重排序可能发生即对b的赋值可能先于对a的赋值。 同一个锁的unlock操作happen-beofre此锁的lock操作 话不多说直接看下面的代码 public class A {public int var;private static A a new A();private A(){}public static A getInstance(){return a;}public synchronized void method1(){var 3;}public synchronized void method2(){int b var;}public void method3(){synchronized(new A()){ //注意这里和method1 method2 用的可不是同一个锁哦var 4;}} }//线程1执行的代码 A.getInstance().method1(); //线程2执行的代码 A.getInstance().method2(); //线程3执行的代码 A.getInstance().method3();如果某个时刻执行完“线程1” 马上执行“线程2”因为“线程1”执行A类的method1方法后肯定要释放锁“线程2”在执行A类的method2方法前要先拿到锁符合“锁的happen-before原则”那么在“线程2”method2方法中的变量var一定是3所以变量b的值也一定是3。但是如果是“线程1”、“线程3”、“线程2”这个顺序那么最后“线程2”method2方法中的b值是3还是4呢其结果是可能是3也可能是4。的确“线程3”在执行完method3方法后的确要unlock然后“线程2”有个lock但是这两个线程用的不是同一个锁所以JMM这个两个操作之间不符合八大happen-before中的任何一条所以JMM不能保证“线程3”对var变量的修改对“线程2”一定可见虽然“线程3”先于“线程2”发生。 对一个volatile变量的写操作happen-before对此变量的任意操作 volatile int a;a 1; //1b a; //2如果线程1 执行//1“线程2”执行了//2,并且“线程1”执行后,“线程2”再执行,那么符合“volatile的happen-before原则”所以“线程2”中的a值一定是1。 如果A操作 happen-before B操作B操作happen-before C操作那么A操作happen-before C操作如果有如下代码块 volatile int var; int b; int c;b 4; //1 var 3; //2c var; //3 c b; //4假设“线程1”执行//1 //2这段代码,“线程2”执行//3 //4这段代码。如果某次的执行顺序如下 //1 //2 //3 //4。那么有如下推导( hd(a,b)表示a happen-before b 因为有hd(//1,//2) 、hd(//3,//4) (单线程的happen-before原则) 且hd(//2,//3) volatile的happen-before原则 所以有 hd(//1,//3),可导出hd(//1,//4) (happen-before原则的传递性) 所以变量c的值最后为4 如果某次的执行顺序如下 //1 //3 //2// //4 那么最后4的结果就不能确定喽。其原因是 //3 //2 直接符合上述八大原则中的任何一个不能通过传递性推测出来什么。 通过对上面的四个原则的详细解释省下的四个原则就比较显而易见了。这里就不做详细解释了。欢迎积极留言大家一起讨论。 作者aworker 链接https://www.jianshu.com/p/1508eedba54d 来源简书 著作权归作者所有。商业转载请联系作者获得授权非商业转载请注明出处。
http://www.yutouwan.com/news/482975/

相关文章:

  • react 网站开发网站客户问题解答
  • 昆明做网站软件wordpress免费开放版
  • 深圳沙井做网站wordpress如何打开
  • 制作网页网站代码wordpress4.7安装教程
  • 做钓鱼网站用哪种编程语言wordpress宽屏主题
  • 森马网站建设情况免费个人网站哪个好
  • 做网站ppt招远做网站哪家好
  • 可以做调查问卷的网站Wordpress屏蔽模仿站爬虫ip
  • 基于wordpress的开发前端seo优化方案
  • 百度云 免费 网站主机新老网站做301跳转
  • 搭建网站一般要多少钱2008 iis asp配置网站
  • php网站开发实际教程答案先做网站再备案吗
  • wordpress建站收录快网站怎么响应式布局
  • 青岛seo网站排名网站集约化建设讲话稿
  • 网站建设属于什么税种健身网站开发方式的服务器选择
  • 做网站需要登录什么软件室内设计师参考网站
  • 深圳高端网站建设招聘杭州p2p网站建设
  • 03340网站建设与管理wordpress切换主题
  • 主体负责人和网站负责人欢乐海岸网站建设
  • 固镇县住房和城乡建设局网站最近国际时事热点事件
  • wine wordpress themeseo关键词优化推广外包
  • 岐山网站建设百度搜索引擎首页
  • 宝安网站制作网站建设网页图片尺寸
  • seo竞争对手网站分析找人做菠菜网站需要多少钱
  • 小城镇建设投稿网站seo线上培训多少钱
  • joomla 宠物网站模板网站设计建设维护与更新
  • 免费的个人简历模板 医学生优化裁员
  • 天津网站建设哪家有珠海网站推广
  • 中国建设银行手机银行官方网站同创企业网站建设
  • 阿里云网站建设官方自营店工业设计网站知乎