91精品国产手机在线-白筒袜嫩萝双腿之间乳白液体-青青操手机在线视频观看-日本中文字幕人妻日韩-日韩精品在线观看视频网站-天堂资源中文最新版在线一区-欧美专区一区二区三区-国产综合亚洲欧美在线-国产精品久久久久久福利69堂

男生上鎖了是什么意思 鎖是什么意思

文章目錄[隱藏]

  • 文章目錄
  • 問題的根源
  • 什么是鎖?
  • 為什么有鎖?
  • 私有制和公有制
  • 資源的稀缺和充足
  • 保證隱私
  • 僧多肉少
  • 為什么有鎖?
  • 有哪幾種鎖?
  • 不談質(zhì)量 。該不該排隊(duì)——公平鎖和不公平鎖?
  • 雖然很多人排隊(duì),但里面未必沒有坑——樂觀鎖和悲觀鎖 。
  • 入閘后可以直接入特定的坑——重入鎖和不重入鎖嗎?
  • 一個坑只能蹲一個人 。坑外洗手區(qū)呢——共享鎖和獨(dú)占鎖?
  • 是要一直排隊(duì),還是先在旁邊抽根煙——旋鎖和自適應(yīng)旋鎖?
  • 有打不開的鎖嗎?
  • 那些被忽視的鎖
  • 最終關(guān)鍵字
  • 揮發(fā)性關(guān)鍵字
  • 公共、私人、受保護(hù)
  • 上帝:公共廁所示意圖
文章目錄問題來源什么叫鎖為什么會有鎖私有制和公有制資源的稀缺和充足保證隱私僧多肉少為什么會有鎖都有什么樣的鎖講不講素質(zhì)要不要排隊(duì)—公平鎖和非公平鎖雖然很多人排隊(duì),但里邊未必沒有坑位—樂觀鎖和悲觀鎖進(jìn)了大門,能不能直接進(jìn)入具體坑位—可重入鎖和不可重入鎖一個坑位只能蹲一個人,那坑位外邊的洗手區(qū)呢—共享鎖和排他鎖要不要一直排隊(duì)等,還是先去旁邊抽根煙—自旋鎖和適應(yīng)性自旋鎖有沒有開不了的鎖那些被忽略的鎖final關(guān)鍵字volatile關(guān)鍵字public、private、protected神圖:公廁示意圖
問題的根源還是有一次面試呀,人家就問我:說說鎖的實(shí)現(xiàn)原理吧 。我當(dāng)時(shí)的反應(yīng)就是:小朋友,你是不是有很多的問號?第一反應(yīng),可以用某某某的一首某某歌的詞來形容:最想說的話,我該從何說起,你是不是也像我一樣在想呢?說說為什么我會有點(diǎn)懵逼的感覺吧 。第一:在我理解,什么叫原理,就是原始的理論或者最初的道理 。一個原理可以約等于一種理念,是不管誰拿著這個原理,都可以擼出一種實(shí)現(xiàn)的 。道理只有一個,但實(shí)現(xiàn)方式千千萬萬 。第二:雖說面試的時(shí)候,前提討論背景是Java語言環(huán)境,但即使是Java里邊的鎖,也分很多的吧 。常見通俗的,就說Synchronized關(guān)鍵字實(shí)現(xiàn)的是不是一種鎖?ReentrantLock實(shí)現(xiàn)的是不是一種鎖?ReadWriteLock實(shí)現(xiàn)的又是不是一種鎖?第三:就上邊說的這三種,在我看來也是不同類型范圍的鎖的不同實(shí)現(xiàn)方式,萬萬達(dá)不到原理層面 。PS:我后來知道了,他是想讓我說Synchronized是怎么實(shí)現(xiàn)的 。昨天還跟一個朋友說起這個事兒,他是覺得我有點(diǎn)較真了,面試的時(shí)候,就是要說出對方想聽的,然后大家都認(rèn)可的答案 。說來也奇怪,我問他:來來來,我們說說Java里邊鎖的實(shí)現(xiàn)原理吧?哇塞,他就立馬開始說Synchronized的什么monitorenter和monitorexit指令,什么flag的ACC_SYNCHRONIZED標(biāo)志了 。我也很懵了,或許是我真的太固執(zhí)吧 。只是內(nèi)心深處,私以為:概念、原理性的東西,一定要是清晰明確的,不能混為一談 。后來說著說著我也不想多說,就再問了朋友一個問題:好,你說了那么多非常的好,再問你一個問題:為什么會有鎖? 至此,我把天聊死了 。其實(shí),我還有好多問題呢:有無所謂的萬能鎖?鎖的作用是啥?怎么實(shí)現(xiàn)自己的鎖?在A場景到底需不需要鎖,為什么需要鎖,需要什么樣的鎖? 多說無益,我終究是又把天聊死了 。
什么是鎖?《辭源》曰:“鎖,古謂之鍵,今謂之鎖 。”《辭海》解釋為:“必深圳生活網(wǎng)須用鑰匙方能開脫的封緘器” 。再縱觀歷史,鎖的產(chǎn)生,伴隨著私有制的產(chǎn)生 。不知道有么有童鞋記得中學(xué)的一篇文章《禮記-大同》中的“故外戶而不閉“,不閉,咱們可以理解為不加鎖的意思 。想一下,為什么家里的們要上鎖?或者說是自己的筆記本要加開機(jī)密碼—我認(rèn)為設(shè)置密碼,本質(zhì)上就是加鎖? 什么情況沒有鎖,換種說法是:什么情況不必有鎖?
為什么有鎖?私有制和公有制回到《大同》篇,人們之所以不必戶,因?yàn)槭谴笸鐣?。什么是大同社會,天下為公,就是資源是大家的,沒有人有權(quán)利或者有必要把某個東西加鎖 。PS:額,有點(diǎn)類似共產(chǎn)主義哈 。但如果用個Java關(guān)鍵詞來說的話,大同就是public 。
資源的稀缺和充足想象一下我們的家為什么會有鎖?怕賊偷啊,他把東西偷了,我就沒有了,他富我窮 。那人為什么要偷東西呢?因?yàn)樗麤]有自己的資源 。或者說資源只有一份,你現(xiàn)在擱家里鎖起來,就意味著我沒辦法擁有,好東西誰都想要 。但如果,資源很充足呢?就跟咱們常說的,現(xiàn)在有些人在路上看見一塊錢,都不帶彎腰去撿的,這時(shí)候敞開了送都不要,還搞個鎖干啥使呢?
保證隱私其實(shí)生活中還深圳生活網(wǎng)有一種情況,比如說:小姑娘在家換衣服,明明大門是鎖了的,為什么還要把自己房間的們也鎖上?所以有時(shí)候加鎖,也因?yàn)樾枰軓?qiáng)的隱私性,我在一個空間里干了什么我不希望別人知道 。
僧多肉少這一點(diǎn)和第二點(diǎn)有些許不同 。就是說,盡管資源很稀缺,現(xiàn)在手里就只有1兩二師兄的肉肉,但你確定全世界就只有你一個人而已,這時(shí)候需要鎖嗎?就跟班里只有一個學(xué)生一樣,你永遠(yuǎn)都是第一 。
為什么有鎖?因?yàn)橛行┤说胗浳业拿烂玻⑾霌?jù)為己有 。要么加鎖藏起來保證我獨(dú)自私有,要么干掉”有些人“ 。當(dāng)我不能手染血腥”殺進(jìn)程、殺線程“的時(shí)候,我只能把我自己lock起來了 。PS:真要說起來,加鎖是一種犧牲自己,保護(hù)別人的手段 。
有哪幾種鎖?事已至此,我要祭出大招了 。請看文章結(jié)尾的圖,公廁示意圖 。PS:歷史中的博客有說過為啥我一貼圖就是祭出大招 。
不談質(zhì)量 。該不該排隊(duì)——公平鎖和不公平鎖?大家都排著隊(duì)上廁所,你說你實(shí)在很急,得了,有人能憋有人憋不得 。或者有個孕婦炎炎烈日站著排隊(duì),你說這時(shí)候讓不讓這些很急或者很需要被照顧的人排到第一個去呢? 不讓就深圳生活網(wǎng)是公平鎖,管你什么呢,大家統(tǒng)一排隊(duì),先到先蹲坑 。讓了就是非公平鎖,各憑本事,有些人可能來了2小時(shí)都沒個坑位,有些人剛來就有坑位了 。比如:ReetrantLock通過構(gòu)造函數(shù)指定其的公平性,如果是公平的,那么所有的線程都加入隊(duì)列中等待,先進(jìn)先出 。Synchronized是非公平的,沒有那么個隊(duì)列呀,大家來了就到門口搶唄,誰狠誰蹲坑 。
雖然很多人排隊(duì),但里面未必沒有坑——樂觀鎖和悲觀鎖 。就跟上廁所一樣的,有時(shí)候根本就是下意識的看著很多人排著隊(duì),然后就以為是里邊沒有坑位了,然后自己還默默的加入到隊(duì)伍后邊,排呀排呀 。突然有一個人沒排隊(duì)進(jìn)去了,然后又XXX了一會子開門出來了 。哈哈哈,其實(shí)很可能通用坑位沒人用啊 。或者大家都排著隊(duì)想去洗洗小手,或者排隊(duì)的都是女同胞,其實(shí)作為男同胞的你是有專屬坑位的 。Synchronized是悲觀的,只要有人從大門進(jìn)去了,里邊就一定沒有坑位了 。CAS認(rèn)為是樂觀的,先去看看再說,有人就老實(shí)排著,沒人就蹲坑 。在Java里邊的話,用各種鎖,不僅限于Synchronized,都是一種悲觀的態(tài)度,總有刁民想害朕,朕先搞把鎖把自己保護(hù)起來 。而無鎖編程則是樂觀的,雖說總有刁民想害朕,但等他來害我的時(shí)候,我再把他打死,平常我就專心練我的絕世神功 。
入閘后可以直接入特定的坑——重入鎖和不重入鎖嗎?ReetrantLock和Synchronized都是可重入鎖 。如圖所示,一共3個坑位,鑰匙有3把,只要你拿到大門的鑰匙,就可以進(jìn)去蹲坑 。可重入鎖很有好處的耶,試想一下,當(dāng)你興高采烈拿到大門鑰匙的時(shí)候,總覺得下一秒就可以沖進(jìn)去蹲坑,誰知道,里邊的坑位還有鎖,并且里邊還排著一堆人,這時(shí)候,只能說你完了,完了,尿褲子了,等”si“吧,女票在外邊等那么久都等不著你,等待超時(shí),女票遠(yuǎn)走 。哦豁,都完了 。
一個坑只能蹲一個人 。坑外洗手區(qū)呢——共享鎖和獨(dú)占鎖?一個坑位只能蹲一個人,你蹲了,我就不能蹲 。但洗手區(qū),你可以洗,我可以洗,他可以洗,咱們可以一起洗 。ReentrantLock和Synchronized是排他的,我占了這個坑位,你就只能等著 。但ReadWriteLock不同 。雖然我拿了大門鑰匙,但我只獨(dú)占坑位,其他人想蹲坑需要等待,但只想洗洗小手的話,則大膽的往前走就闊以了 。所以也會經(jīng)常發(fā)些,公廁常理來說是不關(guān)大門甚至沒有大門鎖的,只是每個坑位才有關(guān)門和開門的概念 。
是要一直排隊(duì),還是先在旁邊抽根煙——旋鎖和自適應(yīng)旋鎖?自旋鎖,就是你看著有人排隊(duì),然后你一直在隊(duì)伍里邊排著,直到你等到了一個坑位,然后離開 。炎炎烈日或者凜冽寒風(fēng),可憐的你就站在隊(duì)伍里排著,很消耗生命體能的 。在程序里應(yīng)該是耗費(fèi)CPU吧,但也有好處,就是你可以第一時(shí)間拿到坑位 。適應(yīng)性自旋鎖,舉個栗子吧:你現(xiàn)在看見有3個人進(jìn)入大門進(jìn)了小坑位了,這時(shí)候,突然有一個人出來洗小手手,但是突然她又進(jìn)去蹲坑了—傳說中的偏向鎖 。這個時(shí)候是個人都會在這等的吧,希望就在不遠(yuǎn)的前方了 。—據(jù)說是輕量級的鎖 。但是,萬萬沒想到啊,這人也是蹲坑界的王者,你都等30分鐘了,還沒有出來 。等個鬼,咱不等了 。然后大喊一聲:里邊的勇士,假如出坑了,請大喊一聲有坑位了,小的立馬就來 。——好像是重量級的鎖 。這時(shí)候,有好處也有壞處 。好處就是不用一直站著等啊,壞處就是得來回跑,其實(shí)哪個耗費(fèi)體能多,還真說不準(zhǔn),看等待的時(shí)間長短吧 。
有打不開的鎖嗎?【男生上鎖了是什么意思 鎖是什么意思】不知道有緣路過的眾位勇士有木有經(jīng)歷過這么一個名場面 。廁所里邊的人出不來,廁所外邊的人進(jìn)不去,大家一直在吵吵,有些本來想蹲坑后來又不想的人被困在里邊,有些本來只是進(jìn)去洗個小手手的人,也被困在里邊 。我是在春運(yùn)的時(shí)候,在火車站經(jīng)歷了N次這樣的名場面 。這其實(shí),就是一把開不了的鎖 。而且除了有坑位的門這種有形的鎖,還有想擠出來的人,和想擠進(jìn)去的人之間形成的無形的鎖 。也再次說明,鎖是一個抽象概念,不是一個具體的實(shí)物 。在Java編碼中也是一樣的,并不一定是咱們聲明了一把鎖,比如用個Synchronized或者別的啥啥啥,才會有鎖的出現(xiàn) 。比如說你明明就沒有聲明鎖呀,結(jié)果整個進(jìn)程都形成死鎖了 。所以,但凡有資源競爭的地方,都不是掛了一把鎖,才有鎖的,鎖是個保護(hù)機(jī)制 。從原則上說,沒有開不了的鎖,也沒有一定要開的鎖 。根據(jù)加鎖的不同目的,和獲取鎖的不同目的,可以有分別不同的行為 。問題是:是否愿意放棄被鎖住的東西?是否愿意去保護(hù)被鎖住的東西?被鎖住的東西是否能有個完美的替換品?但一個線程一定要完整獲取被鎖住的那個東西時(shí),而鎖住東西的那個線程不愿意放手時(shí),這就是一把開不了的鎖—死鎖 。形成死鎖的四個條件:互斥條件、請求與保持條件、 不剝奪條件、循環(huán)等待條件 。對于編程而言是鎖,是死鎖 。對于人而言,就是結(jié),死結(jié) 。只要愿意有任意一方任意一個環(huán)節(jié)作出讓步,都不會有開不了的鎖 。
那些被忽視的鎖難道只有Synchronized、ReentrantLock這呀那的才算是鎖嗎?那CAS也沒個鎖的意思,可也還是鎖呀 。所以鎖終歸只是一種抽象的東西,只是一種約定:我上了鎖,大家都不許破壞爭搶 。有將約定實(shí)體化的,也有放得開看得透不搞鎖的 。
最終關(guān)鍵字final關(guān)鍵字修飾的類、方法、變量,不允許被修改 。什么不能被繼承啊,什么不能被重寫可以重載呀,咱們都先不說 。這個關(guān)鍵字,真是太大氣也太慈悲了,為什么這么說呢,這資源是我的呀,我插上旗幟落下我自己的記號已經(jīng)成為我獨(dú)有的了 。我本可以通過圍柵欄,加鎖的方式讓其他人都得不到 。但是,我把資源加上保護(hù)罩,公開陳列展出,允許你看,允許你用,甚至允許你山寨,只要你不破壞我原來的樣子就可以了 。像String,Integer、Array、Math等,我所有的好東西,大家誰都可以看看,拿著用 。有時(shí)候,我們?yōu)槭裁匆渔i,不過就是因?yàn)槲也幌M麑儆谖业臇|西,被別人改動破壞 。所以,保證私有,有時(shí)候的本質(zhì)目的其實(shí)是保證不可變就闊以了 。
揮發(fā)性關(guān)鍵字如果說final關(guān)鍵字大氣又慈悲,volatile關(guān)鍵字就跟個慈善家似的 。別人家的公廁只能在外邊排隊(duì)等,但volatile家的允許你進(jìn)去洗手區(qū)域等 。一旦有人出坑,你立馬就可以進(jìn)去 。而不是像排隊(duì)在外邊的人一樣,就算有人出了坑位在洗手,他也依然在等待,甚至是以為里邊沒有可用坑位而原地爆炸 。volatile是個善良的人,但善良的人也會有底線,底線就是:當(dāng)一個人想進(jìn),一個人想出的時(shí)候,必須先出才能進(jìn),傳說中的指令重排 。要說這個關(guān)鍵字沒有鎖么?不見得 。如果沒有鎖,為什么必須先出才能再進(jìn)呢?只是鎖的不那么明顯 。
公共、私人、受保護(hù)這些訪問控制關(guān)鍵字,從對自己所持資源的開放程度來說,也能是不同程度的鎖 。不想說了,突然很困,睡覺來著的 。
上帝:公共廁所示意圖

    推薦閱讀