分類
數(shù)據(jù)結(jié)構(gòu):ConcurrentHashMap, BlockingQueue 系列
線程池:Executor, ExecutorService, ThreadPoolExecutor, ScheduledThreadPoolExecutor, Executors(工廠類), Callable, Runnable, Future
鎖:ReentrantLock, ReentrantReadWriteLock, Condition
線程同步:CountDownLatch, CyclicBarrier
線程池飽和策略
ThreadPoolExecutor 的飽和策略通過調(diào)用 setRejectedExecutionHandler 來修改宵喂。不同的飽和策略如下。
- AbortPolicy: executor 拋出未檢查 RejectedExecutionException会傲,調(diào)用者捕獲這個(gè)異常锅棕,然后自己編寫能滿足自己需求的處理代碼。
- DiscardRunsPolicy: 遺棄最舊的淌山,選擇丟棄的任務(wù)裸燎,是本應(yīng)接下來就執(zhí)行的任務(wù)。
- DiscardPolicy: 遺棄會(huì)默認(rèn)放棄最新提交的任務(wù)泼疑。
- CallerRunsPolicy: 調(diào)用者運(yùn)行德绿,既不會(huì)丟棄那個(gè)任務(wù),也不會(huì)拋出任何異常退渗,把任務(wù)推回到調(diào)用者那里移稳,以此減緩新任務(wù)流。它不會(huì)在池線程中執(zhí)行最新提交的任務(wù)会油,但它會(huì)在一個(gè)調(diào)用了execute() 的線程中執(zhí)行个粱。
Runnable 和 Callable 接口有什么不同
Callable 的 call() 方法可以返回值和拋出異常,而 Runnable的 run() 方法沒有這些功能钞啸。Callable 可以返回裝載有計(jì)算結(jié)果的 Future 對象
Java線程池中 submit() 和 execute() 方法有什么區(qū)別
兩個(gè)方法都可以向線程池提交任務(wù)几蜻,execute() 方法的返回類型是 void喇潘,它定義在 Executor 接口中,而 submit() 方法可以返回持有計(jì)算結(jié)果的 Future 對象梭稚,它定義在 ExecutorService 接口中颖低。