首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏技术知识总结

    Java先行发生原则

    先行发生原则(Happens-Before)是Java内存模型定义一个等效判断原则。 依赖这个原则,我们可以通过几条简单规则判断数据是否存在竞争,线程是否安全,而不需要陷入Java内存模型苦涩难懂定义之中。---“先行发生原则指的是什么。 下面是Java内存模型下一些“天然先行发生关系,这些先行发生关系无须任何同步器协助就已经存在,可以在编码中直接使用。 Java 语言无须任何同步手段保障就能成立先行发生规则有且只有上面这些。---“时间上先后顺序”与“先行发生”之间有什么不同?一个操作“时间上发生”不代表这个操作会是 “先行发生”。 时间先后顺序与先行发生原则之间基本没有因果关系,所以我们衡量并发安全问题时候不要受时间顺序干扰,一切必须以先行发生原则为准。

    45330编辑于 2023-06-05
  • 来自专栏Java成长之路

    先行发生原则(happens-before)介绍

    先行发生”(happens-before)原则。 一、什么是先行发生原则 现在就来看看“先行发生原则指的是什么。 3. volatile变量规则(Volatile Variable Rule):对一个volatile变量写操作先行发生于后面对这个变量读操作,这里“后面”同样是指时间上先后顺序。 ,根据程序次序规则,“int i=1”操作先行发生于“int j=2”,但是“int j=2”代码完全可能先被处理器执行,这并不影响先行发生原则正确性,因为我们在这条线程之中没有办法感知到这点。 上面两个例子综合起来证明了一个结论:时间先后顺序与先行发生原则之间基本没有太大关系,所以我们衡量并发安全问题时候不要受到时间顺序干扰,一切必须以先行发生原则为准。

    3.2K20发布于 2018-09-29
  • 来自专栏云霄雨霁

    Java虚拟机--先行发生原则

    先行发生原则先行发生是Java内存模型中定义两项操作数之间偏序关系,如果说操作A先行发生于操作B,就是说在发生操作B之前,操作A产生影响能被操作B观察到,“影响”包括修改了内存中共享变量值、发送了消息、调用了方法等 线程启动规则 :Thread对象start方法先行发生于此线程每个动作;  线程终止规则 :线程中所有操作都先行发生于对此线程终止检测;  线程中断规则 :对线程interrupt()方法调用先行发生于被中断线程代码检测到中断时间发生 ;  对象终结规则 :一个对象初始化完成先行发生于它finalize方法开始;  传递性 :如果操作A先行发生于操作B,操作B先行发生于操作C,那么,操作A也就先行发生于操作C。  依次分析一下先行发生原则各个原则:由于两个方法分别在不同线程中被调用,程序次序原则不适用;没有同步块,自然不会发生lock和unlock操作,管程锁定原则不适用;value变量没有被volatile

    61560发布于 2018-05-22
  • 来自专栏JavaEdge

    Happens-beofre 先行发生原则(JVM 规范)

    )原则 这个原则非常重要,它是判断数据是否存在竞争,线程是否安全主要依赖。 先行发生原则 指的是JMM中定义两项操作之间依序关系 happens- before关系 主要用于强调两个有冲突动作之间顺序,以及定义数据争用发生时机 如果说操作A先行发生于操作B,就是在说发生 线程中断规则(Thread Interruption Rule) 对线程interrupt()方法调用先行发生于被中断线程代码检测到中断事件发生,可以通过Thread.interrupted() A先行发生于操作B,操作B先行发生于操作C,那就可以得出操作A先行发生于操作C结论 一个操作”时间上发生“不代表这个操作会是”先行发生“,那如果一个操作”先行发生“是否就能推导出这个操作必定是”时间上发生 也是不成立,一个典型例子就是指令重排序 所以时间上先后顺序与先行发生原则之间基本没有什么关系,所以衡量并发安全问题一切必须以先行发生原则为准。

    60910发布于 2021-02-22
  • 来自专栏韩曙亮的移动开发专栏

    【Java 并发编程】指令重排序规范 ( happens-before 先行发生原则 )

    文章目录 一、指令重排序规范 二、happens-before 先行发生原则 一、指令重排序规范 ---- 指令重排指的是 , 线程中如果两行代码 没有逻辑上上下关系 , 可以对代码进行 重新排序 ; 规范 : 先行发生原则 ; 二、happens-before 先行发生原则 ---- happens-before 先行发生原则 : A happens-before B , A 先于 B 发生 , 使用 指令重排 ; happens-before 先行发生原则 适用场景 : 在以下场景中 , 不进行指令重排 , 这些先后顺序 , 绝对不能被打乱 , 否则会出现严重线程安全问题 ; 程序次序原则 检测到 中断时 事件发生 ; 必须先发生中断 , 然后才能被检测到 ; 不能还没发生中断 , 就可以检测到中断发生 ; 对象终结 : 对象创建 先于 对象终结 , 创建就是调用构造函数 , 终结就是调用 finalize 方法 ; 只要符合上述规则 , 不需要进行同步 , 就可以成立 ; 通过 " happens-before 先行发生原则 " 可以判定两个线程操作 , 是否有发生冲突可能 ;

    45710编辑于 2023-03-29
  • 来自专栏无原型不设计

    什么是“移动先行原则,如何践行?

    2010年全球移动通信大会上,谷歌时任首席执行官Eric Schmidt 提出:产品设计应遵循 “移动先行” 原则。 该原则具体指什么?遵循该原则依据有哪些?为什么它在产品设计中如此重要? 因为“移动先行原则,就是“逐步增强” 策略一个具体表现形式。 “移动先行”,顾名思义,即在设计多终端产品时,首先设计限制较多移动端版本,再一步步向高级终端迈进。 ? 二、为什么在产品设计中,“移动先行原则如此重要? 除了以上提到“逐步增强”设计策略可操作性更强外,“移动先行原则其实还具有强大现实基础:移动端需求爆炸式增长。 人们每天在移动端使用网络时间越来越长。 ? 3. 早在2012年,全球智能手机销量就超过PC电脑销量。 ? 移动端需求爆炸式增长,要求设计师在进行产品设计时,重视产品移动端版本,遵从 “移动先行设计原则。 三、如何在产品设计中践行移动先行原则

    1.7K40发布于 2018-03-16
  • 来自专栏硬件工程师

    3W原则,20H原则,五五原则

    3W原则: 这里3W是线与线之间距离保持3倍线宽。你说3H也可以。但是这里H指的是线宽度。不是介质厚度。 是为了减少线间串扰,应保证线间距足够大,如果线中心距不少于3倍线宽时,则可保持70%线间电场不互相干扰,称为3W规则。如要达到98%电场不互相干扰,可使用10W规则。针对EMI。 20H原则: 是指电源层相对地层内缩20H距离,当然也是为抑制边缘辐射效应。在板边缘会向外辐射电磁干扰。将电源层内缩,使得电场只在接地层范围内传导。有效提高了EMC。 若内缩20H则可以将70%电场限制在接地边沿内;内缩100H则可以将98%电场限制在内。针对EMC PCB设计中20H原则? 笔面试作答简记: 20H原则是指电源层边缘要比地层边缘至少缩进20倍层与层间距,以抑制边缘辐射效应; 内缩20H可限制70%电场,内缩100H可限制98%电场。

    2.3K10编辑于 2022-08-29
  • 来自专栏全栈程序员必看

    3W原则

    大家好,又见面了,我是你们朋友全栈君。 目的: 为了减少走线之间电磁串扰。 方法: 两个走线中心间距至少得大于3线宽。 如果线中心距不少于3倍线宽时,则可保持70%线间电场不互相干扰,称为3W原则。如要达到98%电场不互相干扰,可使用10W原则。 一般在设计过程中因走线过密无法所有的信号线都满足3W的话,我们可以只将敏感信号采用3W处理,比如时钟走线、差分线、视频、音频,复位线,以及其他系统关键电路等,多个高速信号线长距离走线时,为了减少线与线之间串扰 ,必须强制使用3W原则。 用规则进行约束,但是规则用两线之间距离是边缘距离。因此规则设置值应为10.8 。

    1.8K30编辑于 2022-07-05
  • 来自专栏国产程序员

    面向对象7种设计原则(3)-依赖倒置原则

    依赖倒置原则 High level modules should not depend upon low level modules.Both should depend upon abstractions 高层模块不应该依赖低层模块,两者都应该依赖其抽象(模块间依赖通过抽象发生,实现类之间不发生直接依赖关系,其依赖关系是通过接口或抽象类产生) Abstractions should not depend 由于RunTu是一个高级模块并且是一个细节实现类,此类依赖了书籍Java和Linux又是一个细节依赖类,这导致RunTu每读一本书都需要修改代码,这与我们依赖倒置原则是相悖。 this.iBook = iBook; } void study() { this.iBook.bookName(); } } 总结 依赖倒置原则本质就是通过抽象 我们在项目中使用这个原则要遵循下面的规则: 每个类尽量都有接口或者抽象类,或者抽象类和接口两都具备 变量表面类型尽量是接口或者抽象类 任何类都不应该从具体类派生 尽量不要覆写基类方法 如果基类是一个抽象类

    71430发布于 2020-07-28
  • 来自专栏JavaEdge

    Java内存模型与volatile关键字Java内存模型(JMM)指令重排序对于Long和double型变量特殊规则内存屏障有序性(Ordering)先行发生原则

    先行发生原则 如果JMM中所有的有序性都只靠volatile和synchronized,那么有一些操作将会变得很繁琐,但我们在编写Java并发代码时并没有感到这一点,这是因为Java语言中有一个先行发生 先行发生原则是指JMM中定义两项操作之间依序关系 如果说操作A先行发生于操作B,就是在说发生B前,A产生影响能被B观察到,“影响”包含了修改内存中共享变量值、发送了消息、调用了方法等。 传递性(Transitivity):如果操作A先行发生于操作B,操作B先行发生于操作C,那就可以得出操作A先行发生于操作C结论。 一个操作”时间上发生“不代表这个操作会是”先行发生“,那 如果一个操作”先行发生“是否就能推导出这个操作必定是”时间上发生“呢?也是不成立,一个典型例子就是指令重排序。 所以时间上先后顺序与先生发生原则之间基本没有什么关系,所以衡量并发安全问题一切必须以先行发生原则为准。

    1.5K100发布于 2018-05-16
  • 来自专栏小樱的经验随笔

    设计模式六大原则3):依赖倒置原则

    解决方案:将类A修改为依赖接口I,类B和类C各自实现接口I,类A通过接口I间接与类B或者类C发生联系,则会大大降低修改类A几率。          读物,只要是带字都属于读物: interface IReader{ public String getContent(); } Mother类与接口IReader发生依赖关系,而Book和Newspaper 所以遵循依赖倒置原则可以降低类之间耦合性,提高系统稳定性,降低修改程序造成风险。     现在很流行TDD开发模式就是依赖倒置原则最成功应用。          在实际编程中,我们一般需要做到如下3点: 低层模块尽量都要有抽象类或接口,或者两者都有。 变量声明类型尽量是抽象类或接口。 使用继承时遵循里氏替换原则。        

    70580发布于 2018-04-08
  • 来自专栏编程

    设计模式六大原则3):依赖倒置原则

    解决方案:将类A修改为依赖接口I,类B和类C各自实现接口I,类A通过接口I间接与类B或者类C发生联系,则会大大降低修改类A几率。 读物,只要是带字都属于读物: Mother类与接口IReader发生依赖关系,而Book和Newspaper都属于读物范畴,他们各自都去实现IReader接口,这样就符合依赖倒置原则了,代码修改为: 所以遵循依赖倒置原则可以降低类之间耦合性,提高系统稳定性,降低修改程序造成风险。 现在很流行TDD开发模式就是依赖倒置原则最成功应用。 在实际编程中,我们一般需要做到如下3点: 低层模块尽量都要有抽象类或接口,或者两者都有。 变量声明类型尽量是抽象类或接口。 使用继承时遵循里氏替换原则

    78770发布于 2018-01-02
  • 来自专栏太阳影的学习记录

    数值分析笔记(3)——数值计算中原则

    数值计算中原则 避免两个相近数相减 如上图所示,因为 x 和 y 非常相近,所以 x-y << 0 ,而 x - y 又位于分母,所以会导致误差变得非常大。 要避免另一方面的原因是,会导致有效数字位数大量减少,而我们要尽量保证有效数字多。 例子: 这是因为这里变量使用了8位来储存,因为在转换到同一个量级时候,两个小数都要被转换成9位,导致最后一位溢出,最终变成 0.0 \times 10^8 ,从而导致结果出错,小数被“吃掉”。 这个问题是由计算机存储数据方式造成。 解决方法: 绝对值太小数不宜作除数 如果商特别大,下面继续加减乘除运算时候可能会出现“大数吃掉小数”。 例如,如果这里y恰好就是那个很小数,那么就可能导致商绝对误差很大。 注意简化计算程序,减少计算次数 每一步计算都可能出现舍入误差,所以步骤太多的话可能会导致误差过大。

    5.5K40发布于 2021-10-15
  • 来自专栏明志德到的IT笔记

    《软件开发201个原则》—— 一般原则、需求原则、设计原则、编码原则、测试原则、管理原则、产品原则、演变原则

    现存原则发生改变,新原则会被加进来,旧原则将不再适用。实践和从实践中获得经验,促使我们发展了那些原则。 与原则185和201 (强调软件部署后,需求可能发生巨大变化)不同,本原则想表达,在开发过程中,软件也可能发生巨大变化。这些变化可能体现在编写新代码、新测试计划或新需求规格说明上。 如果你仍然认为你可以做更好,请参阅原则3、19、158和159。 原则162强调需要预先分析所有潜难,提前制订应急计划,并不断重新评估新风险。本原则强调需要预想这些风险成为现实。最大管理灾难会在你认为不会发生时候出现。 为了避免这种情况发生,要确保你正在做变更是经过核准(见原则182及183),对每项变更进行核查(见原则97),并在每组变更后进行回归测试(见原则196)。

    1.9K20编辑于 2023-10-21
  • 来自专栏grain先森

    Css3 Animation 动画十二原则

    前言 本文主要介绍了CSS3动画基本原理和常用形式 作为前端设计师和工程师,我们用 CSS 去做样式、定位并创建出好看网站。 我们经常用 CSS 去添加页面的运动过渡效果甚至动画,但我们经常做不过如此。 动效是一个有助于访客和用户理解我们设计强有力工具。这里有些原则能最大限度地应用在我们工作中。 迪士尼经过基础工作练习长时间累积,在 1981 年出版 The Illusion of Life: Disney Animation 一书中发表了动画十二个原则 。 这些原则描述了动画能怎样用于让观众相信自己沉浸在现实世界中。 本文会逐个介绍这十二个原则,并讨论它们怎样运用在网页中。 虽是拆分开了,但一定会保证文章连续性。对于已经发布原则,我会把上面的无序列表项变为可点击状态,方便大家点击查看。

    75120发布于 2019-03-28
  • 来自专栏grain先森

    Css3 Animation 动画原则

    时间节奏 动画时间节奏是需要多久去完成,它可以被用来让看起来很重对象做很重动画,或者用在添加字符动画中。 这很容易让动画消耗更多时间,但调整时间节奏可以帮动画内容和交互方式变得更出众。

    52120发布于 2019-04-09
  • 来自专栏grain先森

    Css3 Animation 动画原则十二

    吸引力 吸引力是艺术作品特质,让我们与艺术家想法连接起来。就像一个演员身上魅力,是注重细节和动作相结合而打造吸引性结果。 精心制作网页上动画可以打造出吸引力,例如 Stripe 这样公司用了大量动画去增加它们结账流程可靠性。 animation: show-container 8s infinite cubic-bezier(.6,-0.44,.37,1.44); transform-style: preserve-3d

    45920发布于 2019-04-17
  • 来自专栏grain先森

    Css3 Animation 动画原则十一

    扎实描绘 (Solid drawing) ? 扎实描绘 当动画对象在三维中应该加倍注意确保它们遵循透视原则。因为人们习惯了生活在三维世界里,如果对象表现得与实际不符,会让它看起来很糟糕。 如今浏览器对三维变换支持已经不错,这意味着我们可以在场景里旋转和放置三维对象,浏览器能自动控制它们转换。 ); } .eleven .shape span.back { transform: translateZ(-3em); } .eleven .shape span.left { transform (3em); } .eleven .shape span.top { transform: rotateX(-90deg) translateZ(-3em); } .eleven .shape span.bottom { transform: rotateX(-90deg) translateZ(3em); } @keyframes eleven { 0% { opacity: 0; }

    52430发布于 2019-04-17
  • 来自专栏grain先森

    Css3 Animation 动画原则

    演出布局 演出布局是确保对象在场景中得以聚焦,让场景中其它对象和视觉在主动画发生地方让位。这意味着要么把主动画放到突出位置,要么模糊其它元件来让用户专注于看他们需要看东西。 在现有页面添加一个遮罩并把那些主要关注内容前置展示。 另一种方法是用动作。当很多对象在运动,你很难知道哪些值得关注。 还有一种方法是做一个晃动和闪烁按钮来简单地建议用户比如他们可能要保存文档。屏幕保持静态,所以再细微动作也会突显出来。 HTML

    Principle 3: Staging

    <a href="https://cssanimation.rocks/principles/" target="_parent

    44320发布于 2019-03-28
  • 来自专栏grain先森

    Css3 Animation 动画原则

    挤压和拉伸 这是物体存在质量且运动时质量保持不变概念。当一个球在弹跳时,碰击到地面会变扁,恢复时间会越来越短。 创建对象时候最有用方法是参照实物,比如人、时钟和弹性球。 当它和网页元件一起工作时可能会忽略这个原则。DOM 对象不一定和实物相关,它会按需要在屏幕上缩放。例如,一个按钮会变大并变成一个信息框,或者错误信息会出现和消失。 尽管如此,挤压和伸缩效果可以为一个对象增加实物感觉。甚至一些形状上小变化就可以创造出细微但抢眼效果。 1; } 35%, 45% { transform: translateX(8em); height: 6em; width: 2em; top: calc(50% - 3em { transform: translateX(8em) translateY(5em); height: 6em; width: 2em; top: calc(50% - 3em

    50010发布于 2019-03-28
领券