前言:文章中只羅列出知識點問題,並不提供對應的答案,僅僅作爲檢驗自己是否對某個知識點存在空缺或遺忘,答案請自行Google;
Java多線程入門級書籍推薦:《Java多線程編程核心技術》
2018年3月4日記錄:
一.簡述 volatile 關鍵字
- a.內存屏障
- b.使用 volatile 關鍵字的場景
二.簡述Java內存模型(非Java虛擬機內存模型)
- a.volatile關鍵字
- b.原子性(注意在64位下的long和double)、可見性、有序性
- c.happens-before原則(先行發生原則)
三.Java中的同步容器(非併發容器)和缺陷
- a.同步容器主要包括兩類
- b.缺陷:性能、異常
四.CopyOnWriteArrayList的實現原理
- a.讀/寫
- b.性能缺陷
- c.優點
五.Java 中堆和棧有什麼不同(以線程的方向來回答)
六.Java 中的死鎖、飢餓、活鎖
- a.死鎖與活鎖的區別
- b.如何避免活鎖
七.線程池!!!
- a.什麼是線程池
- b.使用線程池的好處
- c.線程池的工作原理
- d.Executor接口/ExecutorService接口/AbstractExecutorService 抽象類
- e.Executors類
- f.ThreadPoolExecutor類,構造參數,BlockingQueue的類型、RejectedExecutionHandler處理失敗任務的四種策略
- g.execute和submit的區別
- h.shutdown()和shutdownNow()的區別
- i.線程池的注意事項
- j.簡單線程池的設計
- k.如何合理的配置 java 線程池?如 CPU 密集型的任務,基本線程池
應該配置多大?IO 密集型的任務,基本線程池應該配置多大?用有界
隊列好還是無界隊列好?任務非常多的時候,使用什麼阻塞隊列能獲取
最好的吞吐量?
八.阻塞隊列
- a.ArrayBlockingQueue 和 LinkedBlockingQueue 的區別
- b.DelayQueue與SynchronousQueue
九.什麼是CAS,優缺點
- a.同步鎖的分類
- b.鎖的分類
- c.Java中的悲觀鎖與樂觀鎖
十.Java中實現多線程的四種方式
- a.Thread類/Runnable接口/Callable接口/線程池
- b.Runnable和Callable有什麼不同
十一.實現多線程的同步
- a.synchronized的用法
- b.Lock的用法
- c.volatile和synchronized區別
- d.什麼場景下可以使用volatile替換synchronized
十二.實現線程之間的通信
- a.Object類中wait()\notify()\notifyAll()
- b.Condition接口
- c.管道實現線程間的通信(闡述其缺點)
十三.如何確保線程安全
十四.多線程的優點和缺點
十五.wait()和sleep()的區別
- a.join(),notify(),notifyAll()
十六.Java中interrupted()和isInterrupted()的區別
十七.Java創建線程後,直接調用start()方法和run()的區別
十八.什麼是線程的上下文切換
十九.用戶線程和守護線程有什麼區別
二十.線程的狀態
二十一.Java程序如何停止一個線程
二十二.ThreaLocal的作用及其原理