专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

互联网面试Java中的锁都有哪些?

  在平时工作开发中难免会被多线程操作共享资源相关的问题所困扰,这个时候我们一般来解决这个问题的方式就是通过锁机制来保证线程操作的安全性。在Java中我们经常使用到的锁就是Synchroinzed,JVM的关键字,它是依赖于JVM系统调用来实现锁操作。ReentrantLock,是在Java并发包下的基于AQS实现的一种可重入锁机制,其原理就是采用CAS来修改一个被volatile关键字修饰的int类型数据来标识对象是否获取到了锁,如果state变量值不为零则证明当前有线程正在使用该锁。
  关于锁的概念,其实并不是Java独有的概念,在很多的场景中都会有多线程访问共享的资源的操作,我们可以根据不同的规则将锁进行分类。下面我们就来谈谈在Java中的锁的规则与分类都有哪些?根据是否有对其他线程操作有影响来划分
  乐观锁
  所谓的乐观锁就是默认认为在当前线程去修改数据的情况下,不会有其他线程来进行数据的修改,也就是说在数据的操作过程中是不需要对其进行加锁的。CAS(比较并交换)是乐观锁的最佳实践,也就是需要比较内存中的实际值与期待得到的值是否相同,如果相同了才会更新,其底层实现是利用cmpxchg指令来实现。有兴趣的读者可以研究一下CPU中的cmpxchg指令。
  悲观锁
  顾名思义,也就是默认会认为在当前线程修改数据的时候,一定会有其他的线程对数据进行修改,也就是说在操作共享数据之前必须要对所要操作的数据先进行加锁操作。在Java中的Synchroinzed和ReentrantLock都是悲观锁的实现。根据对获取不到锁的线程的处理情况来划分
  轻量级锁
  所谓的轻量级锁是指如果当前锁已经被某个线程所持有了,如果当前线程获取不到锁的时候,那么就会自旋等待,等到锁释放之后在进行获取当前锁。也就是说在获取到锁之前,线程一直是处于自旋等待。
  重量级锁
  而所谓的重量级锁是指,如果锁被某个线程持有了,当前线程如果获取不到锁,就会将当前线程挂起来等待锁的释放,或者是线程被唤醒的过程。
  从这里可以看出如果使用了重量级锁那么一个线程在获取不到锁的时候就会挂起等待,而这个过程需要进行CPU的线程上下文切换,而这个切换时间远远大于用户执行代码本身的时间,所以对于一般耗时较短的任务可以采用轻量级锁来让线程进行自旋等待,会省去了不少上下文切换的时间。
  从上面的描述中我们也知道,如果使用了轻量级锁,在整个线程持有锁的执行过程中,如果线程自旋等待的时间太长,就会导致资源的浪费,这样就引入了一个概念,就是锁升级,锁粗化,这些操作都是用来对锁进行优化的。一般来讲锁升级是从无锁到偏向锁,再到轻量级锁,再到重量级锁。每个过程都是结合实际来对锁进行处理,有效的解决了因为锁使用不当带来的系统资源消耗等问题。
  上面所提到的无锁,就是不加锁,共享资源被所有线程共同访问,一般来讲CAS的方式就是一种无锁实现。
  偏向锁则是指如果当前线程获取到了锁,在执行过程中也没有其他线程来与之竞争锁,那么这个锁就会偏向于当前持有线程的获取,在当前线程再次执行的时候就不需要在进行获取锁的操作了,这样做的好处就是再一定程度上减少了获取锁所带来的线程开销。
  在之前的分享中我们介绍过关于Synchroinzed的相关原理,有兴趣的读者可以到合集中去查看。根据线程竞争锁获取规则的设计来进行划分
  公平锁
  公平锁,是指如果当前线程已经获取到了锁,并且还未完成操作,其他线程如果想要获取到该锁,那么就必须排队等待。
  非公平锁
  非公平锁,是指如果当前线程已经获取到锁除了,那么新的线程如果想要获取到锁,那么就需要通过CAS操作来抢一下锁,如果抢到了,就执行逻辑,如果抢不到了再去排队等待执行。
  在JDK中对于ReentrantLock的操作就是支持公平与非公平的,默认情况下是非公平的。代码如下SyncobjectfornonfairlocksstaticfinalclassNonfairSyncextendsSync{privatestaticfinallongserialVersionUID7316153563782823691L;Performslock。Tryimmediatebarge,backinguptonormalacquireonfailure。finalvoidlock(){if(compareAndSetState(0,1))setExclusiveOwnerThread(Thread。currentThread());elseacquire(1);}protectedfinalbooleantryAcquire(intacquires){returnnonfairTryAcquire(acquires);}}
  如果线程想要获取到锁,那么需要去修改privatevolatileintstate,对应的值。也就是通过compareAndSetState(0,1)方法来抢一下锁,然后通过setExclusiveOwnerThread(Thread。currentThread()),操作来执行锁如果抢不到则执行acquire(1)操作。
  公平锁的实现代码如下。在获取锁的时候就只进行了acquire(1)操作。SyncobjectforfairlocksstaticfinalclassFairSyncextendsSync{privatestaticfinallongserialVersionUID3000897897090466540L;finalvoidlock(){acquire(1);}FairversionoftryAcquire。Dontgrantaccessunlessrecursivecallornowaitersorisfirst。protectedfinalbooleantryAcquire(intacquires){finalThreadcurrentThread。currentThread();intcgetState();if(c0){if(!hasQueuedPredecessors()compareAndSetState(0,acquires)){setExclusiveOwnerThread(current);returntrue;}}elseif(currentgetExclusiveOwnerThread()){intnextccacquires;if(nextc0)thrownewError(Maximumlockcountexceeded);setState(nextc);returntrue;}returnfalse;}}锁重入机制
  重入锁和非重入锁
  所谓的重入锁,就是当前线程获取到锁的时候,如果这个线程再次进入获取锁的时候可以直接进入而不需要重新获取锁的操作。在Java中的Synchroinzed和ReentrantLock都是可重入锁。而非重入顾名思义就是当前线程如果再次执行同步代码块的时候还需要再次等待获取锁。锁共享机制
  独占锁和共享锁
  独占锁的概念就是说如果有一个线程获取到锁,那么其他线程则不能继续获取该锁,也就是说这个锁是对于这个线程来讲是独有的。
  共享锁则是指一个锁可以有多个线程来共同获取,也就是一个线程获取到该锁之后,其他线程还可以继续获取到该锁。
  上面我们提到的基于AQS实现的ReentrantLock就是独占锁。而AQS也是提供了共享锁的操作方案tryAcquireShared,Semaphore就是通过tryAcquireShared来实现的共享操作。
  图片来源网格

孩子吃什么才能有效预防秋冬季感冒?选对方法很重要天气逐步变凉,很多家长会要给孩子吃一些热乎乎的东西。每年到了秋冬季节交替的时候,孩子很容易感冒咳嗽等。这个时候来一些汤汤水水的饮食来帮助孩子发汗,能很好的起到预防感冒的作用。除了日宋茜登嘉人NOW冬季刊封面,只穿一件吊带胸衣,大秀好身材宋茜登上嘉人NOW冬季刊,四个封面各有特色,宋茜用超强的肢体语言和细腻的表情,展示了什么叫高级灵动!第一个封面,宋茜只穿一件吊带胸衣,展示完美腹肌,肩下的黑痣清晰可见,分外吸睛,为对城中村的理解与包容,可能就是广州这座一线城市最大的善意这里是刘小顺的旅行和生活研究所。前些天,我和朋友一起偶然来到了广州市海珠区的一个城中村,这个城中村地理位置非常好,能与地标建筑广州塔同框,据说很多游客都会专程过来打卡拍照。不过我对松江千年古银杏,美爆了虽然已进入小雪节气,但是松江的秋意依旧未尽。位于小昆山镇的千年古银杏也换上了唯美的盛装,迎来了一年中最美的时刻。灿烂绚丽的银杏黄,犹如散发着金色的光芒。跟着小松一起来云赏叶吧!这株1941年的陕西西安,美国记者镜头下古色古香雄伟壮观的千年古都这是一组拍摄于1941年的西安的老照片。照片的拍摄者是美国人卡特霍尔顿。卡特霍尔顿中文名海映光,霍尔顿1901年出生于美国威斯康辛州,从1923年开始,卡特霍尔顿曾多次来华,足迹遍眯眯眼不能代表中国人,背后或是西方对华人上千年的种族歧视关于眯眯眼的争议,近几年一直持续不断。最有意思的一点是,眯眯眼被上升到民族文化自信,只要质疑便是自卑的表现。民众无奈,眯眯眼的存在的确正常,可眯眯眼就能代表所有中国人?西方种族歧视千年雷峰塔轰然倒塌,神秘地宫重见天日,塔下面真的有白蛇?传说雷峰塔倒塌之际,就是白娘子得救之时。谁都没想到,雷峰塔倒塌这样虚无缥缈的事,居然还真的发生过。2000年,我国的一批考古学家接到了一个秘密任务,即刻动身前往杭州雷峰塔。因为在当流传千年古方,补一身气血,可治15种病中医认为人之所有者,血与气耳,气和血是组成人体的基本物质,它们关系着脏腑机能的运行,和身体健康密切相关。如果气血出现了问题,百病就会丛生,正如古代医学典籍中的论述血气不和,百病乃变如果司马懿没有发动高平陵政变,这世界上多了千年家族如果司马懿没有发动高平陵之变,历史会怎样?这世界上将多一个六百年家族与千年传颂的忠臣世家,少了一个野心家与二世而乱的搞笑王朝。从司马懿的十二世祖司马卬随项羽灭秦,受封殷王建都河内,古代农民为何会揭竿而起,基层官吏逼得太紧才是根本原因农民起义在中国封建王朝统治中并不少见,从西周时期的国人暴动到清朝末年的太平天国运动,中国历史上有记载的农民起义不下万起。然而翻阅这些史料,我们不难发现这些诸多起义之中,他们的口号无房地产税专家告诉你什么是专业看法专家与瓜众的区别是什么?瓜众习惯于用生活的语言去描述复杂的事情,而专家习惯于用书本的语言去描述简单的生活,比如,股市是涨还是跌,瓜众说我正趴在地板上被反复摩擦到了专家嘴里就成了日线
网友睿评我们必须带着爱和善意,开启新的奋斗一年!春节是中国最重要的节日之一,它是一个充满爱和善意的时刻,是一个重新开始重新燃起希望的时刻。在春节期间,我们会团聚在一起,与亲人朋友共度佳节。家家户户都会打扫卫生,装饰房间,准备好各换机周期越来越长,售后要求也在提高,网友小米11系列做得不错实话实说,这几年手机市场呈现萎靡不振的状态,出现这个状况的原因与手机性能的提升有关,以前的处理器性能孱弱,安卓机往往用个一两年就会感觉到卡顿,而现在的手机,别说旗舰处理器,就算是骁信号太差!美用户对iPhone14购买欲下降,网友不如来选择国产其实对比苹果这些年的成绩,会发现iPhone14系列的销量就是不可观的。原因大家也清楚,iPhone14对比起上一代来说,可以说是毫无升级,就连外观都长得一模一样,根本让人毫无换机国内最贵的野生动物园!网友好评!特别大,值得一去!说起国内的野生动物园,相信各位都去过不少,但是,哪个才是中国最大,最值得去的呢?文章的标题,也不是吹的,这确实是国内最大的野生动物园,总体面积多达2000多亩这也确实是国内口碑最好文案那些年充满遗憾的回忆1。hr年龄总是如期而来,难过总是不请自来,意外总是突如其来,而你为何总是不来2。hr有个词叫做碎碎念关系是指跟你聊天我会开启碎碎念模式给你发很多信息因为我知道你早晚会回我并且不会这个社会笑穷不笑贱当我们长大后就应该明白这个社会笑穷不笑贱,不管男人还是女人没有事情比别人活得好好的更重要,这是作为一个人作为别人的儿女作为别人的丈夫妻子的一种担当。所谓的笑穷不笑贱的贱,并不是说为东亚地区田径协会11日成立王楠当选第一届主席1月11日,东亚地区田径协会(东亚田协)第一届代表大会以线上会议形式成功举行。亚田联主席达兰秘书长舒古以及东亚地区8个会员协会的代表共同出席了会议。会议审议通过了东亚田协章程,通过湖人集体失准!詹姆斯远投效率创生涯新低,自带体系彻底崩盘?在苦战两个加时输给独行侠之后,湖人目前以19胜23负的战绩排名西部第13位,仍旧在附加赛区域外苦苦挣扎,虽然詹姆斯本赛季场均砍下29。0分8。4篮板6。8助攻,整体投篮命中率高达5亚洲地区唯一裁判组马宁傅明等4位中国裁判将首度执法世俱杯扬子晚报网1月15日讯(记者孙云岳张晨瑆张昊)据裁判圈报道,中国国际级裁判员马宁傅明国际级助理裁判员周飞张铖4人将参与世俱杯的执法工作。2022年国际足联俱乐部世界杯将于2023年记者昨天确实有40强赛ampampamp12强赛期间和国家队在一起的人被带走直播吧1月16日讯去年11月,前国足主帅李铁因涉嫌严重违法被带走调查,随后有媒体表示,深足总经理丁某和前国门张鹭等人也被带走调查。据记者赵宇消息,昨天又有40强赛以及12强赛期间和2023。1。15周末早上好丨冬天暖心早安问候语朋友圈祝福语早上好,一支笔,写下的是一字一句的关怀一阵风,带去的是千言万语的祝福一个冬季,飘满整个天空的想念一条信息,包含的是无法言说的真挚情谊。朋友,冬天好冷,记得照顾好自己!冷风呼呼吹,我
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网