concurrent

2018-05-03 22:12 更新

筆者能力有限,總結(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)類:

  • ReentrantLock
    • ReadWriteLock

6.什么是柵欄? 賽馬,人到齊了一起跑

7.什么是閉鎖? 來一個(gè),條件滿足,放行

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號