国产睡熟迷奷白丝护士系列精品,中文色字幕网站,免费h网站在线观看的,亚洲开心激情在线

      <sup id="hb9fh"></sup>
          1. 千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)

            手機(jī)站
            千鋒教育

            千鋒學(xué)習(xí)站 | 隨時(shí)隨地免費(fèi)學(xué)

            千鋒教育

            掃一掃進(jìn)入千鋒手機(jī)站

            領(lǐng)取全套視頻
            千鋒教育

            關(guān)注千鋒學(xué)習(xí)站小程序
            隨時(shí)隨地免費(fèi)學(xué)習(xí)課程

            當(dāng)前位置:首頁(yè)  >  技術(shù)干貨  > 隊(duì)列和棧是什么?有什么區(qū)別?

            隊(duì)列和棧是什么?有什么區(qū)別?

            來(lái)源:千鋒教育
            發(fā)布人:qyf
            時(shí)間: 2022-08-01 17:03:03 1659344583

            隊(duì)列和棧

              隊(duì)列先進(jìn)先出,棧先進(jìn)后出。

              遍歷數(shù)據(jù)速度不同。

              棧只能從頭部取數(shù)據(jù) 也就最先放入的需要遍歷整個(gè)棧最后才能取出來(lái),而且在遍歷數(shù)據(jù)的時(shí)候還得為數(shù)據(jù)開(kāi)辟臨時(shí)空間,保持?jǐn)?shù)據(jù)在遍歷前的一致性;

              隊(duì)列則不同,他基于地址指針進(jìn)行遍歷,而且可以從頭或尾部開(kāi)始遍歷,但不能同時(shí)遍歷,無(wú)需開(kāi)辟臨時(shí)空間,因?yàn)樵诒闅v的過(guò)程中不影像數(shù)據(jù)結(jié)構(gòu),速度要快的多。

              Java8開(kāi)始ConcurrentHashMap,為什么舍棄分段鎖?

              ConcurrentHashMap的原理是引用了內(nèi)部的 Segment ( ReentrantLock ) 分段鎖,保證在操作不同段 map 的時(shí)候, 可以并發(fā)執(zhí)行, 操作同段 map 的時(shí)候,進(jìn)行鎖的競(jìng)爭(zhēng)和等待。從而達(dá)到線程安全, 且效率大于 synchronized。

              但是在 Java 8 之后, JDK 卻棄用了這個(gè)策略,重新使用了 synchronized+CAS。

              棄用原因:

              通過(guò) JDK 的源碼和官方文檔看來(lái), 他們認(rèn)為的棄用分段鎖的原因由以下幾點(diǎn):

              加入多個(gè)分段鎖浪費(fèi)內(nèi)存空間;

              生產(chǎn)環(huán)境中, map 在放入時(shí)競(jìng)爭(zhēng)同一個(gè)鎖的概率非常小,分段鎖反而會(huì)造成更新等操作的長(zhǎng)時(shí)間等待;

              為了提高 GC 的效率;

              提供了新的同步方案:既然棄用了分段鎖, 那么一定由新的線程安全方案, 我們來(lái)看看源碼是怎么解決線程安全的呢?(源碼保留了segment 代碼, 但并沒(méi)有使用)。

              ConcurrentHashMap(JDK1.8)為什么要使用synchronized而不是如ReentranLock這樣的可重入鎖?

              我想從下面幾個(gè)角度討論這個(gè)問(wèn)題:

              1. 鎖的粒度

              首先鎖的粒度并沒(méi)有變粗,甚至變得更細(xì)了。每當(dāng)擴(kuò)容一次,ConcurrentHashMap的并發(fā)度就擴(kuò)大一倍。

              2. Hash沖突

              JDK1.7中,ConcurrentHashMap從過(guò)二次hash的方式(Segment -> HashEntry)能夠快速的找到查找的元素。在1.8中通過(guò)鏈表加紅黑樹(shù)的形式彌補(bǔ)了put、get時(shí)的性能差距。

              JDK1.8中,在ConcurrentHashmap進(jìn)行擴(kuò)容時(shí),其他線程可以通過(guò)檢測(cè)數(shù)組中的節(jié)點(diǎn)決定是否對(duì)這條鏈表(紅黑樹(shù))進(jìn)行擴(kuò)容,減小了擴(kuò)容的粒度,提高了擴(kuò)容的效率。

              下面是我對(duì)那個(gè)面試問(wèn)題的一些看法,即為什么是synchronized,而不是ReentranLock?

              1. 減少內(nèi)存開(kāi)銷(xiāo)

              假設(shè)使用可重入鎖來(lái)獲得同步支持,那么每個(gè)節(jié)點(diǎn)都需要通過(guò)繼承AQS來(lái)獲得同步支持。但并不是每個(gè)節(jié)點(diǎn)都需要獲得同步支持的,只有鏈表的頭節(jié)點(diǎn)(紅黑樹(shù)的根節(jié)點(diǎn))需要同步,這無(wú)疑帶來(lái)了巨大內(nèi)存浪費(fèi)。

              2. 獲得JVM的支持

              可重入鎖畢竟是API這個(gè)級(jí)別的,后續(xù)的性能優(yōu)化空間很小。

              synchronized則是JVM直接支持的,JVM能夠在運(yùn)行時(shí)作出相應(yīng)的優(yōu)化措施:鎖粗化、鎖消除、鎖自旋等等。這就使得synchronized能夠隨著JDK版本的升級(jí)而不改動(dòng)代碼的前提下獲得性能上的提升。

              更多關(guān)于“Java培訓(xùn)”的問(wèn)題,歡迎咨詢(xún)千鋒教育在線名師。千鋒已有十余年的培訓(xùn)經(jīng)驗(yàn),課程大綱更科學(xué)更專(zhuān)業(yè),有針對(duì)零基礎(chǔ)的就業(yè)班,有針對(duì)想提升技術(shù)的好程序員班,高品質(zhì)課程助力你實(shí)現(xiàn)java程序員夢(mèng)想。

            tags:
            聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
            10年以上業(yè)內(nèi)強(qiáng)師集結(jié),手把手帶你蛻變精英
            請(qǐng)您保持通訊暢通,專(zhuān)屬學(xué)習(xí)老師24小時(shí)內(nèi)將與您1V1溝通
            免費(fèi)領(lǐng)取
            今日已有369人領(lǐng)取成功
            劉同學(xué) 138****2860 剛剛成功領(lǐng)取
            王同學(xué) 131****2015 剛剛成功領(lǐng)取
            張同學(xué) 133****4652 剛剛成功領(lǐng)取
            李同學(xué) 135****8607 剛剛成功領(lǐng)取
            楊同學(xué) 132****5667 剛剛成功領(lǐng)取
            岳同學(xué) 134****6652 剛剛成功領(lǐng)取
            梁同學(xué) 157****2950 剛剛成功領(lǐng)取
            劉同學(xué) 189****1015 剛剛成功領(lǐng)取
            張同學(xué) 155****4678 剛剛成功領(lǐng)取
            鄒同學(xué) 139****2907 剛剛成功領(lǐng)取
            董同學(xué) 138****2867 剛剛成功領(lǐng)取
            周同學(xué) 136****3602 剛剛成功領(lǐng)取
            相關(guān)推薦HOT
            服務(wù)器為什么要用Linux?

            服務(wù)器為什么要用Linux作為服務(wù)器操作系統(tǒng)的優(yōu)選,Linux在眾多選擇中脫穎而出。Linux作為服務(wù)器操作系統(tǒng)的優(yōu)選,有其獨(dú)特的優(yōu)勢(shì)和特點(diǎn)。包括其...詳情>>

            2023-10-14 12:34:11
            ORM解決的主要問(wèn)題是什么?

            ORM(對(duì)象關(guān)系映射)解決的主要問(wèn)題是將關(guān)系數(shù)據(jù)庫(kù)與面向?qū)ο缶幊讨g的映射困境。在傳統(tǒng)的關(guān)系數(shù)據(jù)庫(kù)中,數(shù)據(jù)以表格的形式存儲(chǔ),而在面向?qū)ο?..詳情>>

            2023-10-14 12:26:19
            Go為什么不支持三元運(yùn)算符?

            Go為什么不支持三元運(yùn)算符Go語(yǔ)言是一種以簡(jiǎn)潔和有效性為目標(biāo)的編程語(yǔ)言,因此在設(shè)計(jì)過(guò)程中,Go的設(shè)計(jì)者刻意排除了一些他們認(rèn)為可能導(dǎo)致復(fù)雜性或...詳情>>

            2023-10-14 12:12:36
            IT通常說(shuō)的平臺(tái)是什么意思?

            在信息技術(shù)(IT)領(lǐng)域,”平臺(tái)”這個(gè)詞有著廣泛的含義,它常常指代支持軟件應(yīng)用開(kāi)發(fā)和運(yùn)行的基礎(chǔ)框架和環(huán)境。以下是對(duì)”平臺(tái)”這個(gè)概念的更深入...詳情>>

            2023-10-14 11:55:36
            什么是PowerPivot?

            什么是PowerPivotPowerPivot,全稱(chēng)”P(pán)owerPivot for Excel”,是Microsoft提供的一種數(shù)據(jù)分析工具,可以作為Excel的插件使用。通過(guò)PowerPivot,...詳情>>

            2023-10-14 11:25:48