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

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

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

2019-11-11 04:36:07
字體:
供稿:網(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ā)表
主站蜘蛛池模板: 泰州市| 太原市| 罗江县| 招远市| 阿拉善右旗| 宜良县| 苍溪县| 齐河县| 邯郸市| 阳信县| 大英县| 乌兰察布市| 玉门市| 嵊泗县| 赤水市| 通州区| 辉南县| 赣州市| 盐源县| 保康县| 建德市| 偏关县| 十堰市| 长治市| 武冈市| 开原市| 临武县| 三门峡市| 湛江市| 沁阳市| 通化市| 上虞市| 农安县| 龙游县| 松桃| 廉江市| 秀山| 禹州市| 全椒县| 漠河县| 宝鸡市|