国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

多線程原理--學(xué)習(xí)筆記

2019-11-11 04:07:10
字體:
供稿:網(wǎng)友

今天查看了java的Executor框架源碼,在此記錄一下,以便查閱。

(一),Executor的線程池通過ThreadPoolExecutor實(shí)現(xiàn),Executors是他的工廠類,這里只說三種常用的類, ?1,Executors.newSingleThreadExecutor():線程池中只有一個(gè)線程,當(dāng)線程執(zhí)行結(jié)束,或因?yàn)槠渌蜻M(jìn)入DEAD狀態(tài),則會(huì)再次創(chuàng)建一個(gè)線程供使用; ?2,Executors.newFixedThreadPool(nThreads):固定數(shù)量的線程池,nThreads為線程池創(chuàng)建時(shí)指定的線程數(shù)量,當(dāng)池中線程數(shù)量不足這個(gè)數(shù)時(shí),如果有任務(wù),則會(huì)新建一個(gè)線程,當(dāng)線程執(zhí)行結(jié)束,或因?yàn)槠渌蜻M(jìn)入DEAD狀態(tài),則會(huì)再次創(chuàng)建一個(gè)線程供使用; ?3,Executors.newCachedThreadPool():比較智能的線程池,理論上說,沒有線程池?cái)?shù)限制,如果jvm或計(jì)算機(jī)運(yùn)行,可以一直創(chuàng)建,當(dāng)然這是不存在的,一般jvm都會(huì)有線程上限。當(dāng)有新任務(wù)的時(shí)候,自動(dòng)創(chuàng)建線程來執(zhí)行,當(dāng)線程執(zhí)行完畢后,或因其他原因停止后,如果沒有allowTimeOut限制,則會(huì)自動(dòng)回收(一般是60s)。

(二)ThreadPoolExecutor是通過內(nèi)部類Worker類來添加線程的,Worker類是一個(gè)Runnable對(duì)象,類中自身包含有一個(gè)Thread對(duì)象,當(dāng)你在運(yùn)行worker的run方法時(shí),其實(shí)他啟動(dòng)的就是他本身里的Thread;

(三)說了這么多,那么多線程的原理是什么? ?要知道這個(gè),首先要明白,線程有5個(gè)狀態(tài):new,runable,running,block,dead;當(dāng)新建一個(gè)線程的時(shí)候,就是new狀態(tài),當(dāng)線程結(jié)束了,就是dead狀態(tài)。好了,也就是說,線程活著的時(shí)候就是在:runable, running, block狀態(tài)之間;

多線程的實(shí)現(xiàn),也就是多線程的復(fù)用過程,也就是說要維持線程在這三個(gè)狀態(tài)之間轉(zhuǎn)換,如何做到呢?

剛剛說到,ThreadPoolExecutor是通過worker來添加線程的,那么在worker里的runWorker方法中,他會(huì)不斷的查詢workQueue(阻塞隊(duì)列)來取任務(wù)執(zhí)行。那么workQueue的數(shù)據(jù)時(shí)如何添加的呢?

這里寫一下,當(dāng)新任務(wù)來的時(shí)候,線程池的工作過程: 1,當(dāng)前線程數(shù) < corePoolSize:即當(dāng)前運(yùn)行的線程數(shù),小于核心線程數(shù)量,則立即創(chuàng)建一個(gè)線程來執(zhí)行任務(wù);

2,當(dāng)前線程數(shù) >= corePoolSize AND workQueue未滿:此時(shí),將任務(wù)添加到workQueue里,等待處理;

3,當(dāng)前線程數(shù) >= corePoolSize AND workQueue滿了 AND 當(dāng)前線程數(shù)


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 长阳| 黑水县| 潍坊市| 哈尔滨市| 湛江市| 阿克苏市| 崇仁县| 甘肃省| 华宁县| 九龙城区| 静乐县| 镇江市| 石台县| 青川县| 秭归县| 西贡区| 恭城| 平定县| 沈阳市| 乌鲁木齐市| 门头沟区| 辉县市| 斗六市| 米脂县| 大竹县| 利辛县| 鹤山市| 靖西县| 临夏市| 金乡县| 武汉市| 积石山| 邯郸市| 宜兰县| 盘锦市| 麻江县| 益阳市| 东乡县| 岗巴县| 竹溪县| 元阳县|