原创 java併發編程(十九)Semaphore、CountdownLatch和CyclicBarrier你都玩過嗎? 一、簡介 二、使用案例 三、原理

在JUC這個線程同步工具包下,有幾個比較遊戲的類,Semaphore、CountdownLatch和CyclicBarrier,你都用過嗎?下面我們就來簡單介紹下他們的用法,並且提供些簡單的代碼示例,方便大家理解。 一、簡介 Semap

原创 java併發編程(十七)帶你瞭解什麼是面試官常說的AQS 一、初識AQS 二、 源碼分析 四、關於Condition的補充

前面我們學習了ReentrantLock,其底層就是用了AQS實現的,應該先講這一章節,但是當時給忘了,現在給補上吧。 關於ReentrantLock的學習,可以參考:https://www.jianshu.com/p/edec518519

原创 java併發編程(十八)啥是讀寫鎖ReentrantReadWriteLock? 一、初識ReentrantReadWriteLock 二、使用案例 三、源碼分析

前面我們學習了AQS,ReentrantLock等,現在來學習一下什麼是讀寫鎖ReentrantReadWriteLock。 當讀操作遠遠高於寫操作時,這時候可以使用【讀寫鎖】讓【讀-讀】可以併發,提高性能。 本文還是基於源碼的形式,希望同

原创 十二年前寫下的,不知道這裏有沒有你的青春?

經歷過分手纔會懂得什麼是難忘 經歷過愛情纔會感受心痛的感覺 日子像流星一樣匆匆劃過… 初三那年我遇見了自己喜歡的女孩,內心無法形容的感覺!很美好 那時候的我還很幼稚,無知的我讓我現在想起都會覺的可笑! 男女朋友??什麼東西,無非是一種內心感

原创 30歲到來,我真的慌了?

很久沒有發技術類文章了,最近感到很迷茫,不知道該做什麼,也不知道學習了更多的技術又能幹什麼。有句話確實是很符合我現在的處境:時勢造英雄!雖然我不是英雄,但是我也沒有一個可以一展所長的環境。記得當初決定回到哈爾濱,還是滿心歡喜的。現在卻真的有

原创 動手寫個五子棋小遊戲【附源碼】 一、概述 二、不足和改進方案 三、總結

五子棋作爲大家休閒娛樂的方式,相信大家都玩過,並且不少人應該精於此道。作爲程序員的我們是否考慮過它是如何實現的?人機如何實現?在線又是如何進行匹配和對戰的呢? 我耗時幾天,終於完成初版的五子棋小遊戲,主要包含下面幾個小功能: 登錄註冊

原创 Redis壓縮表、跳躍表?拿來吧你 什麼是壓縮表? 什麼是跳躍表?

本文主要用來學習下,redis當中使用的壓縮表和跳躍表,爲什麼在諸多的數據結構中,redis要選擇他們作爲自己的數據存儲結構。 什麼是壓縮表? 壓縮表是Redis爲了節約內存而開發的,是由一系列特殊編碼的連續內存塊組成的順序型(seque

原创 年輕人瘋狂逃離的東方小巴黎|出路在哪裏

不知不覺回到哈爾濱工作三年了,經歷了兩家公司,最近又燃起了換工作的心思。都說人挪活、樹挪死,所以,我還想要活着,甚至獲得更好一點,只能選擇挪一挪,說句不好聽的,這就有種矮子裏拔大個的感覺。 概述 稍微熟悉哈爾濱的人都應該知道,哈爾濱是

原创 面向java入門小白的【春節搶紅包】案例 一、基礎知識 二、編碼開始 三、微服務常用組件 四、總結

春節將至,又快到了一年一度搶紅包的激動時刻。 爲此呢,我專門針對想要學習java,或剛開始學習java的小白們,寫了一段簡單易懂的【春節搶紅包】代碼,其中涉及到部分的java編程基礎知識。也涉及到關於真正搶紅包的思考。相信你們一定能有所收

原创 2021年終總結「給自己的一些話」

開篇 原本不打算寫這篇文章,看着大家寫的年終總結,忽然有點傷感,也想對自己說些話。 2021年接近尾聲了,年後我就整30歲了。走出校園已經六年半了,似乎沒有任何一年給自己寫過總結,這大概也是自己沒有混出名堂的部分原因。畢竟不善於總結的人,

原创 java併發編程(十)synchronized原理之wait/notify 一、爲什麼需要wait/notify? 二、wait/notify原理 三、wait/notify使用

一、爲什麼需要wait/notify? 我們都知道wati/notify用於線程間的同步。 假設有一把鎖lock,此時線程t1來持有這把鎖,但是由於其不滿足業務條件暫時不能繼續執行,如果t2此時來獲取鎖,發現鎖仍被t1佔有,則會發生阻塞,造

原创 java併發編程(九)synchronized原理之鎖消除和鎖粗化 一、JMH工具 二、鎖消除 三、鎖粗化

一、JMH工具 在講解之前,我們先熟悉一下JMH工具。 JMH 是 OpenJDK 團隊開發的一款基準測試工具,一般用於代碼的性能調優,精度甚至可以達到納秒級別,適用於 java 以及其他基於 JVM 的語言。 下面只介紹我的使用方法,因爲

原创 java併發編程(十一)LockSupport之park/unpark 一、簡介 二、原理

一、簡介 1.1 主要方法 Park/UnPark方法是LockSupport當中的方法。 其常用方法有如下: park():暫停當前線程。 park(Object blocker):暫停當前線程,並指定負責此線程停放的同步對像。 par

原创 java併發編程(八)synchronized原理之偏向鎖 一、偏向鎖的狀態 二、鎖撤銷

偏向鎖的引入,對輕量級鎖的CAS操作進行了優化。輕量級鎖需要每次都是用CAS來嘗試獲取鎖,佔用CPU時間。 jdk1.6中引入偏向鎖後,只有第一次使用 CAS 將線程 ID 設置到對象的 Mark Word 頭,之後發現這個線程 ID 是自

原创 java併發編程(七)synchronized原理之重量級鎖 一、何爲鎖膨脹? 二、自適應自旋鎖

前文講解輕量級鎖時,當線程使用CAS嘗試對對象加鎖,有兩種失敗情況,一種情況是自己執行了synchronized鎖重入;另外一種,就是本文需要學習的重點內容:鎖膨脹。 一、何爲鎖膨脹? 輕量級鎖是指在滿足一定的條件內,使用CAS(自旋)來嘗