教培參考
教育培訓(xùn)行業(yè)知識(shí)型媒體
發(fā)布時(shí)間: 2024年12月23日 11:40
常見的鎖的類型有偏向鎖、自旋鎖、輕量級(jí)鎖和重量級(jí)鎖四種,不同的鎖有不同的適合場景。比如偏向鎖適用于只有一個(gè)線程訪問同步塊場景;輕量級(jí)鎖適合追求響應(yīng)時(shí)間,鎖占用時(shí)間很短的場景;重量級(jí)鎖適用于追求吞吐量,鎖占用時(shí)間較長的場景。
在編碼過程中可以采取的鎖優(yōu)化思路主要有五種:
1、減少鎖持有時(shí)間。對一個(gè)方法加鎖,不如對方法中需要同步的幾行代碼加鎖;
2、減小鎖粒度。比如ConcurrentHashMap采取對segment加鎖而不是整個(gè)map加鎖,提高并發(fā)性;
3、鎖分離。根據(jù)同步操作的性質(zhì),把鎖劃分為的讀鎖和寫鎖,讀鎖之間不互斥,提高了并發(fā)性。
4、鎖粗化。在一個(gè)間隔性地需要執(zhí)行同步語句的線程中,如果在不連續(xù)的同步塊間頻繁加鎖解鎖是很耗性能的,因此把加鎖范圍擴(kuò)大,把這些不連續(xù)的同步語句進(jìn)行一次性加鎖解鎖。雖然線程持有鎖的時(shí)間增加了,但是總體來說是優(yōu)化了的。
5、鎖消除。鎖消除是編譯器做的事:根據(jù)代碼逃逸技術(shù),如果判斷到一段代碼中,堆上的數(shù)據(jù)不會(huì)逃逸出當(dāng)前線程(即不會(huì)影響線程空間外的數(shù)據(jù)),那么可以認(rèn)為這段代碼是線程安全的,不必要加鎖。
? 如果你想了解更多Java基礎(chǔ)方面的知識(shí)點(diǎn),你可以選擇專業(yè)學(xué)習(xí)一下,讓自己快速從基礎(chǔ)到不斷進(jìn)階,做企業(yè)高薪競聘的精英。
微信掃碼關(guān)注公眾號(hào)
獲取更多考試熱門資料