筆者能力有限,總結(jié)有誤的地方,請讀者協(xié)作更正。需要了解更多,請閱讀相關(guān)書籍。
1.談一談Concurrent并發(fā)工具包 ? Concurrent并發(fā)工具包是java1.5之后出現(xiàn)的,里面提供了很多和并發(fā)相關(guān)的工具,用于簡化多線程開發(fā)。
2.什么是BlockingQueue?
線程阻塞式隊(duì)列,用于一個(gè)線程產(chǎn)生產(chǎn)生對象,另一個(gè)線程消費(fèi)對象這種使用場景。
可以用來實(shí)現(xiàn) 生產(chǎn)者-消費(fèi)者機(jī)制;
BlockingQueue有兩個(gè)實(shí)現(xiàn)類:
|- ArrayBlockingQueue
實(shí)現(xiàn)里BlockingQuery接口,是一個(gè)有界的阻塞隊(duì)列,其內(nèi)部實(shí)現(xiàn)是將對象放到一個(gè)數(shù)組里。
|- LinkedBlockingQueue
實(shí)現(xiàn)里BlockingQuery接口,底層是鏈表,可以設(shè)置容量大小。
3.談一談ConcurrentMap? 是一個(gè)線程安全的Map, 有一個(gè)實(shí)現(xiàn)類ConcurrentHashMap; HashMap - 線程不安全 效率高 HashTable - 線程安全 效率低 已經(jīng)過時(shí) 不推薦使用 ConcurrentHashMap - 線程安全 效率比較高
ConcurrentHashMap效率: 鎖不是加載整個(gè)Map上,而是加在正在操作的桶上的,從而在桶的級別實(shí)現(xiàn)了并發(fā) 提高效率 引入和讀寫鎖,在并發(fā)讀的過程中 可以并發(fā) 提升效率
4.什么是ExecutorService -- ThreadPool ? 執(zhí)行器服務(wù)、線程池 線程池,用來共享線程,線程在需要的時(shí)候創(chuàng)建,用完后不銷毀,而是存入線程池,則后續(xù)再需要使用線程時(shí),可以直接從池中獲取線程來使用,從而減少線程的開關(guān)次數(shù),提升程序的性能。 ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, RejectedExecutionHandler handler) corePoolSize 核心池大小 maximumPoolSize 最大池大小 keepAliveTime 空閑的多余線程保持時(shí)間 unit 時(shí)間單位 workQueue 阻塞式隊(duì)列 handler 拒絕服務(wù)助手
(2)通過工具類獲取常用的線程池實(shí)現(xiàn)
Executors
newCachedThreadPool()
創(chuàng)建一個(gè)可根據(jù)需要創(chuàng)建新線程的線程池,但是在以前構(gòu)造的線程可用時(shí)將重用它們。對于執(zhí)行很多短期異步任務(wù)的程序而言,這些線程池通??商岣叱绦蛐阅?。
newFixedThreadPool(int nThreads)
創(chuàng)建一個(gè)可重用固定線程數(shù)的線程池
newSingleThreadExecutor()
創(chuàng)建一個(gè)單一線程的線程池
2.執(zhí)行任務(wù) execute(Runnable) Future submit(Runnable) //可以通過Future的get()方法來觀察任務(wù)是否執(zhí)行結(jié)束 Future submit(Callable) //可以用來觀察任務(wù)是否執(zhí)行結(jié)束 并且可以從線程內(nèi)部帶回返回值 invokeAny() invokeAll()
3.關(guān)閉線程池
shutdown()
ExecutorService 并不會立即關(guān)閉,但它將不再接受新的任務(wù),而且一旦所有線程都完成了當(dāng)前任務(wù)的時(shí)候,ExecutorService 將會關(guān)閉
shutdownNow()
這樣會立即嘗試停止所有執(zhí)行中的任務(wù), 并忽略掉那些已提交但尚未開始處理的任務(wù)。 無法擔(dān)保執(zhí)行任務(wù)的正確執(zhí)行。可能它們被停止了,也可能已經(jīng)執(zhí)行結(jié)束。
5.什么是Lock鎖? 線程同步的機(jī)制 可以實(shí)現(xiàn)類似synchronized代碼塊的效果 但是比synchronized代碼更靈活 更簡單,兩個(gè)實(shí)現(xiàn)類:
6.什么是柵欄? 賽馬,人到齊了一起跑
7.什么是閉鎖? 來一個(gè),條件滿足,放行
更多建議: