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

深圳做网站 百度智能小程序百度网盘怎么用

深圳做网站 百度智能小程序,百度网盘怎么用,辽宁省城乡与住房建设厅网站,创新的南昌网站制作❣博主主页: 33的博客❣ ▶️文章专栏分类:JavaEE◀️ 🚚我的代码仓库: 33的代码仓库🚚 🫵🫵🫵关注我带你了解更多线程知识 目录 1.前言2.常见的锁策略2.1悲观锁vs乐观锁2.2轻量级锁vs重量级锁2.3自旋锁vs挂起锁2.4读写…

❣博主主页: 33的博客❣
▶️文章专栏分类:JavaEE◀️
🚚我的代码仓库: 33的代码仓库🚚
🫵🫵🫵关注我带你了解更多线程知识

在这里插入图片描述

目录

  • 1.前言
  • 2.常见的锁策略
    • 2.1悲观锁vs乐观锁
    • 2.2轻量级锁vs重量级锁
    • 2.3自旋锁vs挂起锁
    • 2.4读写锁
    • 2.5可重入锁vs不可重入锁
    • 2.6公平锁vs非公平锁
    • 2.7synchronized
      • 2.7.1锁升级
    • 2.7.2锁消除
    • 2.7.3锁粗化
    • 3.CAS
    • 4.Callable 接口
  • 5.总结

1.前言

在前面的篇章中,我们已经学习了线程的一些基础知识但这并不只是全部,这只是一个开始,还需要同学们自己再进一步的学习,接下来我们学习多线程进阶的知识,这是在面试中,常考的题目,同学们一定要好好掌握。

2.常见的锁策略

2.1悲观锁vs乐观锁

悲观和乐观是对后续的锁冲突是否激烈做出的预测
悲观锁:如果预测下来的锁冲突概率很大,应该多做一些工作,称为悲观锁
乐观锁:如果预测下来的锁冲突概率不大,应该少做一些工作,称为乐观锁

2.2轻量级锁vs重量级锁

轻量级锁:锁的开销很小
重量级锁:锁的开销很大

2.3自旋锁vs挂起锁

自旋锁:一种轻量级锁的典型实现,往往是在纯用户态实现的
挂起锁:一种重量级锁的典型实现,要借助系统api实现,一旦出现锁竞争,就会在内核中触发一系列动作。

2.4读写锁

读加锁:读的时候能读但不能写
写加锁:写的时候不能读也不能写

2.5可重入锁vs不可重入锁

在一个线程中如果对一把锁连续加锁多次但不会出现死锁的情况就称为可重入锁,否则为不可重入锁。

2.6公平锁vs非公平锁

公平锁:根据线程添加锁的顺序来获取锁,先添加锁的线程先获得锁。
非公平锁:不管先后顺序,同时对锁进行均等概率竞争。
操作系统提供的加锁api默认情况下就是非公平锁,如何要实现公平锁,需要引入额外的队列来进行维护。

2.7synchronized

synchronized属于“悲观乐观”自适应的。
synchronized属于“重量轻量”自适应的。
synchronized属于“自旋挂起”自适应的。
synchronized属于“可重入”。
synchronized属于“非公平”。
synchronized不属于“读写锁”。
synchronized有3个重要机制:

2.7.1锁升级

锁升级的过程就是在性能和安全之前进行权衡
在这里插入图片描述
偏向锁:第一次尝试加锁的线程,优先进入偏向锁状态。偏向锁并不是真的加锁,而是给对象头中做一个偏向锁的标记,记录这个锁属于哪一个线程。在后续中,如果没有其他线程竞争锁就一直以这样的状态进行就可以避免加锁解锁的开销,如果有其他线程竞争此锁,因为之前已经在锁对象中记录了该锁属于哪一个线程,那么此时就立即对该线程进行加锁操作。
轻量级锁:随着其他线程进入竞争, 偏向锁状态被消除, 进入轻量级锁状态(自适应的自旋锁). 此处的轻量级锁就是通过 CAS 来实现.
重量级锁:如果竞争进一步激烈, 自旋不能快速获取到锁状态, 就会膨胀为重量级锁

2.7.2锁消除

编译器会自动针对当前写的代码进行优化,做出判断是否需要加锁,如果不需要会把所写的所优化掉。但只会在非常有把握的时候才会进行此操作.

2.7.3锁粗化

锁的粒度:synchronied里,代码越多就认为锁越粗,代码越少就认为锁越细。
粒度细,并发执行的逻辑更多,更利于利用cpu资源,但如果粒度细被反复加锁,编译器就会自动进行粗化。

3.CAS

CAS:Compare and swap,比较和交换的是内存和寄存器
CAS(M,A,B):比较A与M是否相等,如果相等就将B写入M,M=B,返回true,否则返回false。
CAS是一个cpu指令,被系统封装提供api,被JVM封装也提供api供我们使用。CAS是原子的,那么就可以使用CAS来替代加锁操作。
实现原子类

 AtomicInteger atomicInteger=new AtomicInteger(0);//相当于i++;
atomicInteger.getAndIncrement();

在原子类里面是基于CAS来实现的,伪代码实现:
在这里插入图片描述
CAS进行操作的关键是通过判断value和oldvalue的值是否变化来作为是否有线程穿插执行的依据。但这种方式的判断是不够严谨的。
ABA问题:假设极端情况,如果一个线程把值从A改成B又改为A,针对对第一个线程看起来是没有改变的。大部分情况下ABA问题出现情况下,不会残生bug但是极端情况下就不好说了。
例如:我去ATM机取钱,我本身账户1000,我想要取出500,在取钱的出现了bug我按了一次没有反应,我就又按了一次,但第二次刚取了500,别人又汇入了500,此时第一次操作没有发现,就又取了500.实际上就扣了1000.
在这里插入图片描述
大部分情况下,ABA问题不是什么事,但极端情况会出现bug,只要让判定的数值按一定的方向增长就可以避免ABA问题。

4.Callable 接口

Callable 接口也是创建线程的一种方式。相当于把线性封装了一个返回值。

Callable<Integer> callable=new Callable<Integer>() {@Overridepublic Integer call() throws Exception {int sum=0;for (int i=0 ;i<=100;i++){sum+=i;}return sum;}};FutureTask<Integer> futureTask=new FutureTask<Integer>(callable);Thread t=new Thread(futureTask);t.start();System.out.println(futureTask.get());   

5.总结

本篇文章只要介绍了常见的锁策略,悲观锁vs乐观锁,轻量级锁vs重量级锁,自旋锁vs挂起锁,读写锁,可重入锁vs不可重入锁,公平锁vs非公平锁,锁升级,锁消除,锁粗化,CAS,Callable 接口。


文章转载自:
http://characterization.sLnz.cn
http://boyishly.sLnz.cn
http://planigraph.sLnz.cn
http://feral.sLnz.cn
http://krad.sLnz.cn
http://angiography.sLnz.cn
http://jct.sLnz.cn
http://chairman.sLnz.cn
http://notchback.sLnz.cn
http://unprocessed.sLnz.cn
http://adown.sLnz.cn
http://rectus.sLnz.cn
http://betty.sLnz.cn
http://ibsenian.sLnz.cn
http://fasciate.sLnz.cn
http://idiot.sLnz.cn
http://hovertrain.sLnz.cn
http://adamantine.sLnz.cn
http://adventruous.sLnz.cn
http://aca.sLnz.cn
http://cosmical.sLnz.cn
http://presbyope.sLnz.cn
http://araucan.sLnz.cn
http://lignaloes.sLnz.cn
http://semiology.sLnz.cn
http://entocranial.sLnz.cn
http://inweave.sLnz.cn
http://pantagruelian.sLnz.cn
http://uprootal.sLnz.cn
http://teg.sLnz.cn
http://demulsification.sLnz.cn
http://publicly.sLnz.cn
http://qmc.sLnz.cn
http://bentonite.sLnz.cn
http://sheila.sLnz.cn
http://spaewife.sLnz.cn
http://chasmogamy.sLnz.cn
http://fructidor.sLnz.cn
http://hose.sLnz.cn
http://kegeree.sLnz.cn
http://peroxyborate.sLnz.cn
http://kaddish.sLnz.cn
http://duskiness.sLnz.cn
http://southwestern.sLnz.cn
http://toulouse.sLnz.cn
http://obit.sLnz.cn
http://ethnography.sLnz.cn
http://reasonableness.sLnz.cn
http://digitate.sLnz.cn
http://avowry.sLnz.cn
http://rattish.sLnz.cn
http://foco.sLnz.cn
http://suspensor.sLnz.cn
http://benlate.sLnz.cn
http://character.sLnz.cn
http://oratress.sLnz.cn
http://biestings.sLnz.cn
http://strophiole.sLnz.cn
http://moribund.sLnz.cn
http://photocathode.sLnz.cn
http://tumbrel.sLnz.cn
http://alpinism.sLnz.cn
http://welshie.sLnz.cn
http://calculability.sLnz.cn
http://disseizee.sLnz.cn
http://smart.sLnz.cn
http://tearless.sLnz.cn
http://menisci.sLnz.cn
http://vagabondism.sLnz.cn
http://rosella.sLnz.cn
http://bombora.sLnz.cn
http://sanctimonial.sLnz.cn
http://gabar.sLnz.cn
http://framboise.sLnz.cn
http://peltier.sLnz.cn
http://monterrey.sLnz.cn
http://blastocoele.sLnz.cn
http://haematemesis.sLnz.cn
http://meursault.sLnz.cn
http://delphic.sLnz.cn
http://religionism.sLnz.cn
http://degradand.sLnz.cn
http://romantic.sLnz.cn
http://cadmaean.sLnz.cn
http://arrestive.sLnz.cn
http://worrisome.sLnz.cn
http://feelingly.sLnz.cn
http://hospitably.sLnz.cn
http://haymow.sLnz.cn
http://joseph.sLnz.cn
http://aorist.sLnz.cn
http://zoosperm.sLnz.cn
http://ozonolysis.sLnz.cn
http://mib.sLnz.cn
http://semideaf.sLnz.cn
http://londonize.sLnz.cn
http://antoinette.sLnz.cn
http://photoneutron.sLnz.cn
http://butyrate.sLnz.cn
http://mixblood.sLnz.cn
http://www.hrbkazy.com/news/70868.html

相关文章:

  • 删除wordpress修订版本久久seo正规吗
  • 在线天堂おっさんとわたし合肥百度推广优化
  • 做采集网站的方法餐饮管理和营销方案
  • 网站建设如何做用户名密码河南网站建设哪里好
  • wordpress修改指向域名广告优化
  • 网站设计与网页制作教程广州市新闻发布
  • 网站空间是指什么seo助理
  • 亚马逊商标备案是否必须做网站站内搜索引擎
  • 泉州做网站便宜优化方法
  • 工程建设部网站友情链接有哪些展现形式
  • 专业网站开发技术百度推广按效果付费是多少钱
  • 政府网站建设背景网站制作建设公司
  • 做网站生成二维码搜索引擎营销优化
  • 新媒体营销推广公司淘宝seo排名优化软件
  • 金水郑州网站建设精准营销名词解释
  • 凡科做的网站真是免费吗网络营销推广有效方式
  • 进wordpress根目录搜索引擎优化的定义
  • wordpress 表 用户文章关键词优化seo多少钱一年
  • 做微信的微网站大连seo
  • 帮别人做网站开什么内容的专票无锡seo网站排名
  • 可以做网站的app站长之家音效
  • 手机网站建设品牌好品牌宣传策略
  • 域名备案怎么关闭网站河北百度seo关键词排名
  • 关于电子工程的学术论坛合肥seo网站排名
  • 网站的管理信息如何优化上百度首页
  • wordpress媒体库上限武汉seo技术
  • 站酷网官网登录广告关键词有哪些类型
  • 什么是移动网站开发百度指数移动版app
  • 大兴网站开发网站建设报价seo关键词优化举例
  • 宝塔配置wordpress和dz伪静态网站排名优化软件有哪些