身為JAVA工作者必須了解的實戰(zhàn)知識(五)

一队魏、 在線程中執(zhí)行任務

無限制創(chuàng)建線程的不足

.線程生命周期的開銷非常高

.資源消耗

.穩(wěn)定性

二巩螃、Executor框架

Executor基于生產(chǎn)者-消費者模式,提交任務的操作相當于生產(chǎn)者,執(zhí)行任務的線程則相當于消費者掠手。

1. Executors 返回 ExecutorService

2. ExecutorService方法submit柳恐、execute

3. ExecutorService.submit 返回 Future

線程池伐脖,Executors方法介紹

方法名解釋

newFixedThreadPool將創(chuàng)建一個固定長度的線程池,每當提交一個任務時就創(chuàng)建一個線程乐设,知道達到線程池的最大數(shù)量讼庇,這時線程池的規(guī)模將不再變化(如果某個線程由于發(fā)生了未預期的Exception而結(jié)束,那么線程池會補充一個新的線程近尚。)

newCachedThreadPool將創(chuàng)建一個可緩存的線程池蠕啄,如果線程池的當前規(guī)模超過了處理需求時,那么將回收空閑的線程戈锻,而當需求增加時歼跟,則可以添加新的線程,線程池的規(guī)模不存在任何限制格遭。

newSingleThreadExecutor將會創(chuàng)建一個單線程的Executor哈街,它創(chuàng)建單個工作者線程來執(zhí)行任務,如果這個線程異常結(jié)束拒迅,會創(chuàng)建另一個線程來替代骚秦。newSingleThreadExecutor能確保依照任務在隊列中的順序來串行執(zhí)行(例如FIFO她倘、LIFO、優(yōu)先級)

newScheduledThreadPool創(chuàng)建了一個固定長度的線程池作箍,而且以延遲或定時的方式來執(zhí)行任務帝牡,類似于Timer。

Executor的生命周期

以上四個方法都會返回ExecutorService蒙揣,ExecutorService的生命周期有3種狀態(tài):運行靶溜、關(guān)閉和已終止。

方法名解釋

shutdown將執(zhí)行平緩的關(guān)閉過程:不再接受新的任務懒震,同時等待已經(jīng)提交的任務執(zhí)行完成—包括那些還未開始執(zhí)行的任務罩息。

shutdownNow將執(zhí)行粗暴的關(guān)閉過程:它將嘗試取消所有運行中的任務,并且不再啟動隊列中尚未開始執(zhí)行的任務个扰。

Timer類負責管理延遲任務

三瓷炮、找出可利用的并行性

1. 任務拆分到多個子線程處理。

2. 攜帶結(jié)果的任務Callable與Futrue

Executor執(zhí)行任務的4個生命周期:創(chuàng)建递宅,提交娘香,開始,完成办龄。

任務的提交者和執(zhí)行者之間的通訊手段

[java]view plaincopy

print?

ExecutorService?executor?=?Executors.newSingleThreadExecutor();

Callable?task?=newCallable()?{

publicObject?call()throwsException?{

Object?result?="...";

returnresult;

}

};

Future?future?=?executor.submit(task);

future.get();//?等待至完成

Future?future?=?executor.submit(task);

//?等待到任務被執(zhí)行完畢返回結(jié)果

//?如果任務執(zhí)行出錯烘绽,這里會拋ExecutionException

future.get();

//等待3秒,超時后會拋TimeoutException

future.get(3,??TimeUnit.SECONDS);

Callable?task?=newCallable()?{

publicObject?call()throwsException?{

Object?result?=?…;

returnresult;

}

};

有兩種任務:

Runnable

Callable - 需要返回值的任務

Task Submitter把任務提交給Executor執(zhí)行俐填,他們之間需要一種通訊手段安接,這種手段的具體實現(xiàn),通常叫做Future英融。Future通常包括get(阻塞至任務完成)盏檐, cancel,get(timeout)(等待一段時間)

等等驶悟。Future也用于異步變同步的場景胡野。

3、4. 在異構(gòu)任務并行化中存在的局限

如果一個任務是讀取IO資源痕鳍,可以使用多個線程去同時讀取硫豆,但是效率上限可能出在IO上,即使開啟再多線程讀取總速度也不可能超出IO讀取速度上限额获。

開啟多個線程本身也會調(diào)高編程難度够庙,同時開啟多個線程也會造成資源消耗恭应。

多線程提高效率很多時候并不是增加一個線程效率提高一倍抄邀,可能提高的效率微乎其微。

5. Executor與BlockingQueue

如果想提交一組計算任務昼榛,并且希望在計算完成后獲得結(jié)果境肾,可以使用BlockingQueue保存每個任務的Future剔难。

7. 為任務設(shè)置時限

//等待3秒,超時后會拋TimeoutException

future.get(3,? TimeUnit.SECONDS);

8. ExecutorService.invokeAll()

執(zhí)行給定的任務奥喻,當所有任務完成時偶宫,返回保持任務狀態(tài)和結(jié)果的 Future 列表。返回列表的所有元素的 Future.isDone() 為 true环鲤。注意纯趋,可以正常地或通過拋出異常來終止已完成 任務。如果正在進行此操作時修改了給定的 collection冷离,則此方法的結(jié)果是不確定的吵冒。

四、資料:

《溫紹錦 - Java并發(fā)程序設(shè)計教程》

摘錄“任務的提交者和執(zhí)行者”西剥,“任務的提交者和執(zhí)行者之間的通訊手段”

聊聊并發(fā)(三)——JAVA線程池的分析和使用(原理)

http://www.infoq.com/cn/articles/java-threadPool

Java(Android)線程池(使用)

http://www.trinea.cn/android/java-android-thread-pool/

Java Thread Pool Example using Executors and ThreadPoolExecutor

http://www.journaldev.com/1069/java-thread-pool-example-using-executors-and-threadpoolexecutor

工具可以查看線程數(shù)

jconsole.exe

以上就是我推薦給Java開發(fā)者們的一面試經(jīng)典知識痹栖。但是這些知識里面并沒有太多Java全棧、Java晉階瞭空、JAVA架構(gòu)之類的題揪阿,不是我不推薦,而是希望大家更多的從基本功做起咆畏,打好基礎(chǔ)南捂,太多復雜的內(nèi)容一會兒也說不明白。

好了同學們旧找,我能介紹的也都全部介紹完給你們了黑毅,如果下獲得更多JAVA教學資源,可以選擇來我們這里共同交流钦讳,群:240448376矿瘦,很多大神在這里切磋學習,不懂可以直接問愿卒,晚上還有大牛免費直播教學缚去。

注:加群要求

1、具有一定工作經(jīng)驗的琼开,面對目前流行的技術(shù)不知從何下手易结,需要突破技術(shù)瓶頸的可以加,有些應屆生和實習生也可以加柜候。

2搞动、在公司待久了,過得很安逸渣刷,但跳槽時面試碰壁鹦肿。需要在短時間內(nèi)進修、跳槽拿高薪的可以加辅柴。

3箩溃、如果沒有工作經(jīng)驗瞭吃,但基礎(chǔ)非常扎實,對java工作機制涣旨,常用設(shè)計思想歪架,常用java開發(fā)框架掌握熟練的,可以加霹陡。

4和蚪、覺得自己很牛B,一般需求都能搞定烹棉。但是所學的知識點沒有系統(tǒng)化惠呼,很難在技術(shù)領(lǐng)域繼續(xù)突破的可以加。

5.阿里Java高級大牛直播講解知識點峦耘,分享知識剔蹋,多年工作經(jīng)驗的梳理和總結(jié),帶著大家全面辅髓、科學地建立自己的技術(shù)體系和技術(shù)認知泣崩!

PS:現(xiàn)在主要講解的內(nèi)容是(反射原理枚舉原理與應用洛口、注解原理矫付、常用設(shè)計模式、正規(guī)表達式高級應用第焰、JAVA操作Office原理詳解买优、JAVA圖像處理技術(shù),等多個知識點的詳解和實戰(zhàn))

6.小號或者小白之類加群一律不給過挺举,謝謝杀赢。

最后,每一位讀到這里的網(wǎng)友湘纵,感謝你們能耐心地看完脂崔。覺得對你有幫助可以給個喜歡!希望在成為一名更優(yōu)秀的Java程序員的道路上梧喷,我們可以一起學習砌左、一起進步

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市铺敌,隨后出現(xiàn)的幾起案子汇歹,更是在濱河造成了極大的恐慌,老刑警劉巖偿凭,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件产弹,死亡現(xiàn)場離奇詭異,居然都是意外死亡笔喉,警方通過查閱死者的電腦和手機取视,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進店門硝皂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來常挚,“玉大人作谭,你說我怎么就攤上這事⊙僬保” “怎么了折欠?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長吼过。 經(jīng)常有香客問我锐秦,道長,這世上最難降的妖魔是什么盗忱? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任酱床,我火速辦了婚禮,結(jié)果婚禮上趟佃,老公的妹妹穿的比我還像新娘扇谣。我一直安慰自己,他們只是感情好闲昭,可當我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布罐寨。 她就那樣靜靜地躺著,像睡著了一般序矩。 火紅的嫁衣襯著肌膚如雪鸯绿。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天簸淀,我揣著相機與錄音顾瞻,去河邊找鬼。 笑死挤聘,一個胖子當著我的面吹牛撤缴,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播令蛉,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼聚霜,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了珠叔?” 一聲冷哼從身側(cè)響起蝎宇,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎祷安,沒想到半個月后姥芥,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡汇鞭,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年凉唐,在試婚紗的時候發(fā)現(xiàn)自己被綠了庸追。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡台囱,死狀恐怖淡溯,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情簿训,我是刑警寧澤咱娶,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站强品,受9級特大地震影響膘侮,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜的榛,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一琼了、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧夫晌,春花似錦雕薪、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至要糊,卻和暖如春纲熏,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背锄俄。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工局劲, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人奶赠。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓鱼填,卻偏偏與公主長得像,于是被迫代替她去往敵國和親毅戈。 傳聞我的和親對象是個殘疾皇子苹丸,可洞房花燭夜當晚...
    茶點故事閱讀 44,611評論 2 353

推薦閱讀更多精彩內(nèi)容