前言 ConcurrentHashMap 鬼斧神工,并發(fā)添加元素時(shí),如果 map 正在擴(kuò)容,其他線程甚至于還會(huì)幫助擴(kuò)容,也就是多線程擴(kuò)容。就這一點(diǎn),就可以寫一篇文章好好講講。...
前言 ConcurrentHashMap 鬼斧神工,并發(fā)添加元素時(shí),如果 map 正在擴(kuò)容,其他線程甚至于還會(huì)幫助擴(kuò)容,也就是多線程擴(kuò)容。就這一點(diǎn),就可以寫一篇文章好好講講。...
處理過線上問題的同學(xué)基本上都會(huì)遇到系統(tǒng)突然運(yùn)行緩慢,CPU 100%,以及Full GC次數(shù)過多的問題。當(dāng)然,這些問題的最終導(dǎo)致的直觀現(xiàn)象就是系統(tǒng)運(yùn)行緩慢,并且有大量的報(bào)警。...
線程池中有一定數(shù)量的工作線程,工作線程會(huì)循環(huán)從任務(wù)隊(duì)列中獲取任務(wù),并執(zhí)行這個(gè)任務(wù)。那么怎么去停止這些工作線程呢?這里就涉及到線程池兩個(gè)重要概念:工作線程數(shù)量和線程池狀態(tài)。 一...
使用Explain優(yōu)化SQL語句 原文出處:https://my.oschina.net/liughDevelop/blog/1788148 索引類似大學(xué)圖書館建書目索引,可...
樓主你好,我是來懟你的。
你的問題是:你講講線程池的實(shí)現(xiàn)原理。
然而我個(gè)人覺得你的回答也是答非所問。
如果要講線程池原理,那我們就干脆拋開JDK線程池不談。手動(dòng)實(shí)現(xiàn)線程池。
首先引入幾個(gè)概念:一個(gè)是線程池、一個(gè)是線程,一個(gè)是任務(wù)。他們的關(guān)系就是,線程池中包含有運(yùn)行任務(wù)的線程,這些線程都可以復(fù)用。但平時(shí)我們知道,線程的run方法執(zhí)行完就結(jié)束了,所以如果線程池中的線程可以復(fù)用,那一定意味著這個(gè)線程沒有結(jié)束(不死),要想不死,最簡單的辦法就是在run方法中死循環(huán)(當(dāng)然還有別的辦法)。所以線程池說白了,就是創(chuàng)建一個(gè)具有一定數(shù)量的線程,這些線程的run方法都是死循環(huán)的(一定條件下可以結(jié)束)。那么如何讓線程池中的線程,去執(zhí)行任務(wù)呢?只需要把任務(wù)放在一個(gè)合理的列表容器中,讓線程池去這個(gè)任務(wù)列表中取即可。這樣一來就清晰了,線程需要放在線程池中,任務(wù)需要放在任務(wù)列表中。兩者是m:n的比列。只需要調(diào)整好這個(gè)比例,就能夠提高效率。之所以高效主要原因是線程復(fù)用,省掉了“按需創(chuàng)建”這種方式帶來的開銷。
這才是真正的線程池原理。
而你說的,maxSize,IddleSize,minSize,那些都是基于這個(gè)基礎(chǔ)上進(jìn)行更細(xì)粒度的擴(kuò)展管理的參數(shù)而已。
懟完畢!
歡迎回懟!
某天我在****的時(shí)候,突然有個(gè)小伙伴微信和我說:“狼哥,求教為毛wait()要放在同步塊中?” 我頓時(shí)覺得**一緊,仔細(xì)回顧一下,如果wait()方法不在同步塊中,代碼的確...
最近在調(diào)研MAT和VisualVM源碼實(shí)現(xiàn),遇到一個(gè)可疑問題,兩者計(jì)算出來的對(duì)象大小不一致,該信哪個(gè)? 為了復(fù)現(xiàn)這個(gè)問題,準(zhǔn)備了4個(gè)簡單類: 再來個(gè)主函數(shù): 本地環(huán)境是64位...
無題 時(shí)人多見輕生死,失意偏從苦海沉。 鬼火九幽通地府,陣圖八壘放生門。 應(yīng)侯瀕死成名相,游客迷途遇古村。 病樹來年還有望,人生何處不逢春? ——嬴公子 春晚 跨過歲尾躍年頭...