Executor線程池執(zhí)行器,Executors類提供工廠方法實現(xiàn),返回的都是ExecutorService接口的之類,內(nèi)部是ThreadPoolExecutor通過構(gòu)造方法創(chuàng)建線程池;
ThreadPoolExecutor有核心線程數(shù)(corePoolSize)和最大線程數(shù)(maximumPoolSize),如果運行的線程數(shù)少于核心線程數(shù),則創(chuàng)建新線程;排隊三種策略:直接提交(SynchronousQueue 直接創(chuàng)建新線程)、無界隊列(LinkedBlockingQueue 只創(chuàng)建核心線程數(shù)的線程,其他的都排隊)和有界隊列(ArrayBlockingQueue 先創(chuàng)建核心線程數(shù),再放到隊列存儲一部分,再創(chuàng)建小于最大線程數(shù)的線程,大于最大值的線程執(zhí)行拒絕策略);默認拒絕策略為拋出異常;
ScheduledThreadPoolExecutor繼承自ThreadPoolExector,排隊策略采用DelayedWorkQueue;scheduleAtFixedRate方法以固定周期執(zhí)行,不管上次是否執(zhí)行完畢;scheduleWithFixedDelay以固定延遲時間執(zhí)行,需要等上次任務(wù)執(zhí)行完成后再按延遲時間執(zhí)行;
Callable接口與Runnable不同的是可返回Future對象;Future是異步獲取返回值,返回值存放在一個Object屬性,通過泛型轉(zhuǎn)換,獲取值前會調(diào)用wait()休眠,等返回值時再次喚醒,因此此類會導(dǎo)致阻塞;FutureTask是其中一個常用的實現(xiàn)類;
數(shù)據(jù)同步,synchronized有兩個功能,線程互斥和范圍內(nèi)數(shù)據(jù)其它線程可見,volitile也是保證變量在多線程可見;atomic通過CAS方式提供原子性的自增方法,也是線程安全的;
Lock 替代了 synchronized 方法和語句的使用,有l(wèi)ock、tryLock和unlock方法,作用是線程互斥,配合Condition 對象進行阻塞喚醒等操作;
ReadWriteLock讀寫鎖,與InnoDB的共享鎖和獨占鎖類似,可以運行多個線程讀和一個線程寫,有寫操作時讀操作不能進行;
Condition 替代了 Object的wait、notify 和 notifyAll,方法包括await、signal、signalAll,用于阻塞與喚醒;Condition 可以通過lock.newCondition()方法獲得,假設(shè)只有一個Condition,緩存隊列中已經(jīng)存滿,這個Lock不知道喚醒的是讀線程還是寫線程了,如果喚醒的是讀線程,皆大歡喜,如果喚醒的是寫線程,那么線程剛被喚醒,又被阻塞了,這時又去喚醒,這樣就浪費了很多時間;
同步器有四種:Semaphore(信號量)用來控制同時訪問特定資源的線程數(shù)量;CountDownLatch主要有await和countDown兩個方法,初始化計數(shù)器后調(diào)用await使線程進入阻塞狀態(tài),直到countDown為0后自動喚醒;CyclicBarrier即線程都執(zhí)行到一個點后相互等待;Exchanger 允許兩個線程在 collection 點交換對象;
AbstractQueuedSynchronizer是用于構(gòu)建鎖或者其他相關(guān)同步裝置的基礎(chǔ)框架,通過acquire方法獨占對象,release方法釋放獨占對象;
Java多線程
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
- 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
- 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
- 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
- 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
- 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
推薦閱讀更多精彩內(nèi)容
- Java-Review-Note——4.多線程 標(biāo)簽: JavaStudy PS:本來是分開三篇的,后來想想還是整...
- 第三章 Java內(nèi)存模型 3.1 Java內(nèi)存模型的基礎(chǔ) 通信在共享內(nèi)存的模型里,通過寫-讀內(nèi)存中的公共狀態(tài)進行隱...
- 一、多線程 說明下線程的狀態(tài) java中的線程一共有 5 種狀態(tài)。 NEW:這種情況指的是,通過 New 關(guān)鍵字創(chuàng)...
- 1、什么是營銷? a、營銷就是A為B創(chuàng)造對方想要的價值,建立與維持關(guān)系,以獲得回報的思維過程。所以營銷是作...