Mark

Synchronized解析——如果你愿意一层一层剥开我的心

限于喜欢 提交于 2020-08-10 15:52:54
前言 synchronized,是解决并发情况下数据同步访问问题的一把利刃。那么synchronized的底层原理是什么呢?下面我们来一层一层剥开它的心,就像剥洋葱一样,看个究竟。 Synchronized的使用场景 synchronized关键字可以作用于方法或者代码块,最主要有以下几种使用方式,如图: 接下来,我们先剥开synchronized的第一层,反编译其作用的代码块以及方法 。 synchronized作用于代码块 public class SynchronizedTest { public void doSth(){ synchronized (SynchronizedTest.class){ System.out.println("test Synchronized" ); } } } 反编译,可得: 由图可得,添加了synchronized关键字的代码块,多了两个指令 monitorenter、monitorexit 。即JVM使用monitorenter和monitorexit两个指令实现同步,monitorenter、monitorexit又是怎样保证同步的呢?我们等下剥第二层继续探索。 synchronized作用于方法 public synchronized void doSth(){ System.out.println("test

包罗万象——JAVA中的锁,一篇文章让你搞懂这个知识点

大兔子大兔子 提交于 2020-08-10 12:06:36
一、乐观锁 VS 悲观锁 悲观锁 和 乐观锁 大概是大家听到最多的两种锁了,这两种锁的区分更多的是思想上。 对于一个操作,悲观锁认为自己在操作过程中,一定有别的线程也要来修改这个数据,所以一定会加锁。而乐观锁则不认为会有别的线程来干扰自己,所以不需要加锁。 在Java中,synchronized关键字和Lock的实现类都是悲观锁,而乐观锁一般采用无锁编程,也就是CAS算法来实现的。 首先说一说悲观锁 1、悲观锁 悲观锁的流程: 1、线程尝试去获取锁 2、线程加锁成功并执行操作,其他线程等待,线程加锁失败则等待获取锁(这里有好几种办法,在synchronized中,会有在四种状态中改变,在下文中我会介绍这四种情况) 3、线程执行完毕释放锁,其他线程获取锁 通过图片和文字,我们能看出悲观锁适合写操作多的场景,加锁可以确保数据的安全,但是会影响一些操作效率。 2、乐观锁 乐观锁的流程: 1、线程直接获取同步资源数据 2、判断内存中的同步数据是否被其他线程修改 3、没有被修改则直接更新 4、如果被其他线程修则选择报错或者重试(自旋) 和悲观锁不同,乐观锁明显不适合经常进行修改,因为谁也不能保证不会出现数据安全的问题,所以乐观锁适合读操作的场景。对于读操作来说,加锁只会影响效率。 上文说到了,乐观锁一般采用CAS算法来实现,那么我们就来讲讲什么是CAS算法 3、CAS算法 CAS的英语是

iOS-苹果登陆授权(AppleID SignIn)

别等时光非礼了梦想. 提交于 2020-08-10 10:07:53
why do it 如果你的App中包含或涉及到第三方登录(例如:QQ登陆、微信登陆等),就必须接入苹果登陆,如果不适配苹果推出的Sign In With Apple审核将会被拒绝。 what is Sign In With Apple 其实和平时的一些第三方登陆一样,通过授权,可以拿到用户名,邮箱地址,用户ID等信息,接入 Sign In With Apple 后, 应用程序或网站中显示“ 通过Apple登录”按钮,意味着可以使用他们已有的Apple ID进行点击或登录,而无需填写表格,验证电子邮件地址和选择密码等操作;提供了一种新的,更私密的方式登陆。 接入 Sign In With Apple 一、首先手机必须是iOS 13(包含iOS 13)以上的iOS系统 二、项目 Bundle ID(Bundle identifier)勾选 Sign In With Apple 功能,然后保存 三、Xcode 配置 Singing & Capabilities 四、添加 AuthenticationServices.framework 库 五、代码集成 引入头文件 #import <AuthenticationServices/AuthenticationServices.h> 添加代理 <ASAuthorizationControllerDelegate,

是时候抛弃旧的摩尔定律了

此生再无相见时 提交于 2020-08-10 10:06:28
来源:IEEE 转自:悦智网 在技术领域最著名的准则之一就是摩尔定律。在过去55年的时间里,“摩尔定律”已经描述并预测了晶体管的缩小,如一组称为技术节点的数字在过去以大约每两年一次的频率更新。像一些基于物理学的世界末日时钟一样,几十年来,节点数量一直在不停地下降,因为工程师设法使它们可以容纳在同一块硅片中的晶体管数量定期增加一倍。 其实在戈登·摩尔(Gordon Moore) 首次推出以他的名字命名的趋势时,业界并没有节点之类的东西,而且在一个IC上经济上只能集成大约50个晶体管。 但是经过从业人员数十年的艰苦努力和数千亿美元的投资,看看我们已经走了多远!如果您有幸在高端智能手机上阅读本文,那么它内部的处理器是使用称为7纳米节点的技术制造的。这意味着在一平方毫米的硅中大约有1亿个晶体管。在5纳米节点上制造的处理器现已投入生产,行业领导者期望在十年内致力于所谓的1纳米节点。 然后呢? 毕竟1nm已经几乎是五个硅原子的宽度。因此,也许您会以为您很快就会想到摩尔定律将不再存在,半导体制造技术的发展将不会进一步提高处理能力,而固态设备工程是一条死路一条。 不过你会错的。半导体技术节点系统绘制的前景图是错误的。实际上,7纳米晶体管的大多数关键特征都比7纳米大得多,并且命名和物理现实之间的脱节已经存在了大约二十年。当然,这不是秘密,但这确实会带来一些不幸的后果。 一是持续关注“节点

xadmin安装和配置

梦想与她 提交于 2020-08-10 08:22:58
1.在虚拟环境pip install xadmin 2.安装完成之后在settings.py的install app里面添加xadmin和 crispy_forms 3.在主项目url里面把原来的admin改成xadmin 4.运行makemigrations和migrate 这样再访问127.0.0.0:8000/xadmin就能访问成功 也可以进行源码安装,在github里面下载xadmin源码,复制xadmin文件夹到项目主目录下 在setting中添加路径 sys.path.insert( 0, os.path.join(BASE_DIR, 'extra_apps')) 然后新建python package 命名为extra_apps,用于放第三方app 然后mark一下 此时运行项目会提示ImportError: No module named future.utils 需要在网上下载future文件放在C:\Users\Administrator\Envs\mx\Lib\site-packages\目录下 然后pip install six 再运行项目,ok xadmin的注册 在相应的apps下面,新建adminx.py文件,因为xadmin是在每个app下面寻找adminx.py文件 然后注册,注册方法跟admin差不多,不过要注意的是

HTML 与 CSS--乐字节Java

谁说胖子不能爱 提交于 2020-08-10 06:59:05
HTML 与 CSS 主要内容 HTML ​ HTML( HyperText Markup Language )就是超文本标记 语言 。"超文本"就是表示页面内可以包含非文字元素,如:图片、链接、音乐等等。 ​ 它是一种建立网页文件的语言,通过标记式的指令(Tag),将影像、声音、图片、文字等链接显示出来。这种标记性语言是因特网上网页的主要语言。 ​ HTML 网页文件可以使用记事本、写字板、HBuilder、Sublime 等编辑工具来编写,以 .htm 或 .html 为文件后缀名保存。将 HTML 网页文件用浏览器打开显示,若测试没有问题则可以放到服务器(Server)上,对外发布信息。 基础语法 标签 ​ HTML 标记是由"<"和">"所括住的指令标记,用于向浏览器发送标记指令。 ​ 主要分为:单标记指令、双标记指令(由"<起始标记>"+内容+"</结束标记>"构成)。 ​ HTML语言使用标志对的方法编写文件,既简单又方便。它通常使用"<标志名>内容</标志名>"来表示标志的开始和结束,因此在HTML文档中这样的标志对都必须是成对使用的。 ​ 为了便于理解,将HTML标记语言大致分为:基本标记、格式标记、文本标记、图像标记、表格标记、链接标记、表单标记和帧标记等。 单标签 单标签,不设置属性值。 如: <br/>、<hr/> 单标签属性 单标签(也叫空元素),设置属性值

全球首批人造五花肉出炉:基于细胞培植,味道口感良好,5年左右上市

耗尽温柔 提交于 2020-08-10 06:24:51
  猪肉是大众生活中最常见的肉类,但要满足人们吃猪肉的市场需求,却是一项巨大工程。   你有没有发现近两年的猪肉价格是越来越贵了?很大一部分原因是供给出现了缺口。根据国家统计局的数据,2018 年中国猪肉年产量为 5403.74 万吨,同比下降 0.9%,2018 年,中国居民人均猪肉消费量为 22.83 千克,同比增长 13.6%。    2018 年以来,猪瘟进一步刺激了中国猪肉产业的供需矛盾,2019 年生猪存栏 31041 万头,同比下降 27.5%,全年生猪出栏 54419 万头,同比下降 21.6% ,中国白条猪肉平均批发价在 2019 年 10 月曾达到 52.4 元 / 公斤的高价,为了缓解猪肉供给不足,我们甚至需要进口猪肉,据中国海关总署披露,2020 年上半年进口我国进口猪肉达 212.3 万吨,同比增加了 1.4 倍。      图|养猪场中的猪崽(来源:Reuters)   从规模化养猪、抵御猪瘟到宰杀投放市场,每个环节都容易出现各种健康卫生问题和养殖风险,但在未来的世界 ,我们吃的猪肉可能不含抗生素、是可持续的,甚至不需要宰杀。    日前,英国肉类培植公司 Higher Steaks 报告称,他们的实验室已经成功地生产出了世界上第一批细胞培植的 “人造肉” 样品——培根条和五花肉。    Higher Steaks 的首席执行官本杰明娜 · 博拉格

深入理解JVM(③)Java的锁优化

时间秒杀一切 提交于 2020-08-10 02:20:39
前言 从JDK5到JDK6HotSpot虚拟机开发团队花费了大量的资源实现了各种锁优化技术,如 适应性自旋(Adaptive Spinning) 、 锁消除(Lock Elimination) 、 锁膨胀(Lock Coarsening) 、 轻量级锁(LightEight Locking) 、 偏向锁(Biased Locking)等 ,这些技术都是胃了在线程之间更高效地共享数据及解决竞争问题,从而提供程序的执行效率。 自旋锁与自适应锁 在Java中锁起到的作用是互斥同步,而互斥同步对性的影响最大的是阻塞,阻塞是通过挂起线程和恢复线程来实现的,这个操作是很昂贵的,消耗的服务器资源比较大。针对于此虚拟机开发团队发明了自旋锁, 因为在共享数据的锁定状态只会持续很短一段时间,为了这段时间去挂起和恢复线程很不值得。所以在一个线程获得锁的同时另一个线程可以先“稍等一会儿”,但并不放弃处理器执行时间,为了让线程等待,只须让线程执行一个忙循环(自旋),这就是自旋锁。 那么这个自旋锁的自旋时间多久比较合适呢? 如自旋时间太短那就起不到自旋的作用了,太长又会占用过多的处理器资源。所以在JDK1.4.2中引入自旋锁的时候,就提供了自旋次数为10默认值以及可以自行配置的参数-XXPreBlockSpin。 在JDK1.6中对自旋锁进行了优化,引入了自适应自旋

你真的懂 synchronized 吗?

对着背影说爱祢 提交于 2020-08-10 02:08:33
synchronized 的三种使用方式 加在非 static 方法上 (锁的是 this 对象) 加在 static 方法 上 (锁的是 Class 对象) 代码块 (锁的是 括号 中的对象) 在实现同步的时候, 大多数开发人员直接使用 synchronized 关键字, 那你真的了解 synchronized 底层原理吗? 字节码层级 synchronized被编译成 class 文件, 翻译成字节码指令有两个重要的指令 : monitorenter monitorexit , 可以发现有两个 monitorexit , 一个是正常退出, 另一个是异常退出, 所以 synchronized 不会造成死锁 使用 idea 插件, 可以查看字节码指令 JVM层级 我们知道 synchronized 锁的是对象, 那么如何判断对象是否 “锁住” 呢? synchronized 使用的锁是存在对象的 对象头 之中 JVM 规范有这样一句话 : JVM 基于进入和退出 monitor 实现代码同步, 任何对象都有一个 monitor 与之关联, 当 monitor 被持有后, 它将处于锁定状态 操作系统层级 在 JDK1.6 之前, synchronized 是重量级锁, Java 进程是工作在用户态空间上的, 如果需要实现同步, 就必须使用内核的互斥锁, 那就需要 OS

明星造型师Tara Swennen和Glamhive创始人Stephanie Sprangers再次汇聚全球造型、时尚、美妆和女性赋权领域“大咖”参加突破性数字盛会

妖精的绣舞 提交于 2020-08-10 02:06:33
西雅图--(美国商业资讯)--明星造型师Tara Swennen和Glamhive创始人Stephanie Sprangers将再次汇聚全球造型、时尚、美妆和女性赋权领域的一些“大咖”参加突破性的数字盛会——Glamhive数字夏日集会( Glamhive Digital Summer Bazaar )。 此新闻稿包含多媒体内容。完整新闻稿可在以下网址查阅: https://www.businesswire.com/news/home/20200708005857/en/ 在Glamhive首个数字大会Glamhive LIVE风尚峰会(Glamhive LIVE Style Summit)期间,观众们被邀请通过实时现场问答环节与座谈小组展开热烈交流。交流的话题包括在创业时如何冲破性别障碍这样的私密问题,以及如何借助营销找到进军商界的方法等等。由于活动获得巨大成功,Swennen和Sprangers决定提升下一次全球活动的门槛。 明星造型师Tara Swennen表示:“造型、美妆和设计师界有着千丝万缕的联系;我们中许多人都曾经共事过,或是早已相识多年——而今年是非常艰难的一年。我很高兴有机会将我们大家聚集到一起,与每一个也想要加入我们圈子的人分享我们的见解、经验和建议。”Swennen曾是美国服装设计工会(Costume Designers Guild)的会员,曾连续四年入选