還自稱叫Java程式設計師,連這多執行緒常見問題都不知道,嘖嘖嘖
面試官:問你幾個多執行緒相關的問題吧,說一下導致執行緒死鎖的原因,怎麼解除執行緒死鎖?
程式設計師阿里:這個...死鎖...
(一分鐘後)
面試官:不知道?那好,說一下Lock 和 Synchronized 的區別?
程式設計師阿里:Lock是鎖...
面試官:...會就會,不會就說不會,節省一下時間,sleep 和 wait 的區別總該知道吧?
程式設計師阿里:...不怎麼了解
面試官:那多執行緒的幾種實現方式,什麼是執行緒安全,這總該知道吧?
程式設計師阿里:我們能換個技術點問嗎?
面試官:連多執行緒併發你都一問三不知,還要我們怎麼進行下去?
在Java開發中,多執行緒一般是指實現多個任務共同執行的技術,是一個比較基礎,也很常用的技術。
要理解多執行緒,需要先搞懂幾個概念:
程式:每個正在系統上執行的程式都是一個程式。每個程式包含一到多個執行緒。程式也可能是整個程式或者是部分程式的動態執行。
執行緒:執行緒是一組指令的集合,或者是程式的特殊段,它可以在程式裡獨立執行。也可以把它理解為程式碼執行的上下文。所以執行緒基本上是輕量級的程式,它負責在單個程式裡執行多工。通常由作業系統負責多個執行緒的排程和執行。執行緒是程式中一個單一的順序控制流程。
多執行緒:在單個程式中同時執行多個執行緒完成不同的工作,稱為多執行緒。
併發:在作業系統中,併發是指一個時間段中有幾個程式都處於已啟動執行到執行完畢之間,且這幾個程式都是在同一個處理機上執行,但任一個時刻點上只有一個程式在處理機上執行。
多執行緒併發同樣也是面試問題中很大概率會問到的技術點。
下面給大家整理了一套多執行緒併發相關的核心面試點,把所有多執行緒併發常見的面試題彙總到了一起。
這些知識點的導圖和問題的答案詳解的PDF文件都可以免費分享給大家,幫小編轉發一下文章後,私信【多執行緒】免費領取!
Java多執行緒併發
1. JAVA 併發知識庫
2. JAVA 執行緒實現/建立方式
1. 繼承 Thread 類
2. 實現 Runnable 介面
3. ExecutorService、Callable<Class>、Future 有返回值執行緒
4. 基於執行緒池的方式
3. 4 種執行緒池
1. newCachedThreadPool
2. newFixedThreadPool
3. newScheduledThreadPool
4. newSingleThreadExecutor
4. 執行緒生命週期(狀態)
1. 新建狀態(NEW)
2. 就緒狀態(RUNNABLE)
3. 執行狀態(RUNNING)
4. 阻塞狀態(BLOCKED)
- 等待阻塞(o.wait->等待佇列)
- 同步阻塞(lock->鎖池)
- 其他阻塞(sleep/join)
5. 執行緒死亡(DEAD)
- 正常結束
- 異常結束
- 呼叫 stop
5. 終止執行緒 4 種方式
1. 正常執行結束
2. 使用退出標誌退出執行緒
3. Interrupt 方法結束執行緒
4. stop 方法終止執行緒(執行緒不安全)
6. sleep 與 wait 區別
7. start 與 run 區別
8. JAVA 後臺執行緒
9. JAVA 鎖
1. 樂觀鎖
2. 悲觀鎖
3. 自旋鎖
- 自旋鎖的優缺點
- 自旋鎖時間閾值(1.6 引入了適應性自旋鎖)
- 自旋鎖的開啟
4. Synchronized 同步鎖
- Synchronized 作用範圍
- Synchronized 核心元件
- Synchronized 實現
5. ReentrantLock
- Lock 介面的主要方法
- 非公平鎖
- 公平鎖
- ReentrantLock 與 synchronized
- ReentrantLock 實現
- Condition 類和 Object 類鎖方法區別區別
- tryLock 和 lock 和 lockInterruptibly 的區別
6. Semaphore 訊號量
- 實現互斥鎖(計數器為 1)
- 程式碼實現
- Semaphore 與 ReentrantLock
7. AtomicInteger
8. 可重入鎖(遞迴鎖)
9. 公平鎖與非公平鎖
- 公平鎖(Fair)
- 非公平鎖(Nonfair)
10. ReadWriteLock 讀寫鎖
- 讀鎖
- 寫鎖
11. 共享鎖和獨佔鎖
- 獨佔鎖
- 共享鎖
12. 重量級鎖(Mutex Lock)
13. 輕量級鎖
- 鎖升級
14. 偏向鎖
15. 分段鎖
16. 鎖優化
- 減少鎖持有時間
- 減小鎖粒度
- 鎖分離
- 鎖粗化
- 鎖消除
10. 執行緒基本方法
1. 執行緒等待(wait)
2. 執行緒睡眠(sleep)
3. 執行緒讓步(yield)
4. 執行緒中斷(interrupt)
5. Join 等待其他執行緒終止
6. 為什麼要用 join()方法?
7. 執行緒喚醒(notify)
8. 其他方法
11. 執行緒上下文切換
1. 程式
2. 上下文
3. 暫存器
4. 程式計數器
5. PCB-“切換楨”
6. 上下文切換的活動
7. 引起執行緒上下文切換的原因
12. 同步鎖與死鎖
1. 同步鎖
2. 死鎖
13. 執行緒池原理
1. 執行緒複用
2. 執行緒池的組成
3. 拒絕策略
4. Java 執行緒池工作過程
14. JAVA 阻塞佇列原理
1. 阻塞佇列的主要方法
- 插入操作
- 獲取資料操作
2. Java 中的阻塞佇列
3. ArrayBlockingQueue(公平、非公平)
4. LinkedBlockingQueue(兩個獨立鎖提高併發)
5. PriorityBlockingQueue(compareTo 排序實現優先)
6. DelayQueue(快取失效、定時任務)
7. SynchronousQueue(不儲存資料、可用於傳遞資料)
8. LinkedTransferQueue
9. LinkedBlockingDeque
15. CyclicBarrier、CountDownLatch、Semaphore 的用法
1. CountDownLatch(執行緒計數器 )
2. CyclicBarrier(迴環柵欄-等待至 barrier 狀態再全部同時執行)
3. Semaphore(訊號量-控制同時訪問的執行緒個數)
16. volatile 關鍵字的作用(變數可見性、禁止重排序)
1. 變數可見性
2. 禁止重排序
3. 比 sychronized 更輕量級的同步鎖
4. 適用場景
17. 如何在兩個執行緒之間共享資料
1. 將資料抽象成一個類,並將資料的操作作為這個類的方法
2. Runnable 物件作為一個類的內部類
18. ThreadLocal 作用(執行緒本地儲存)
1. ThreadLocalMap(執行緒的一個屬性)
2. 使用場景
19. synchronized 和 ReentrantLock 的區別
1. 兩者的共同點
2. 兩者的不同點
20. ConcurrentHashMap 併發
1. 減小鎖粒度
2. ConcurrentHashMap 分段鎖
- ConcurrentHashMap 是由 Segment 陣列結構和 HashEntry 陣列結構組成
21. Java 中用到的執行緒排程
1. 搶佔式排程
2. 協同式排程
3. JVM 的執行緒排程實現(搶佔式排程)
4. 執行緒讓出 cpu 的情況
22. 程式排程演算法
1. 優先排程演算法
2. 高優先權優先排程演算法
3. 基於時間片的輪轉排程演算法
23. 什麼是 CAS(比較並交換-樂觀鎖機制-鎖自旋)
1. 概念及特性
2. 原子包 java.util.concurrent.atomic(鎖自旋)
3. ABA 問題
24. 什麼是 AQS(抽象的佇列同步器)
1. Exclusive 獨佔資源-ReentrantLock
2. Share 共享資源-Semaphore/CountDownLatch
3. 同步器的實現是 ABS 核心(state 資源狀態計數)
4. ReentrantReadWriteLock 實現獨佔和共享兩種方式
答案預覽:
這些知識點的導圖和問題的答案詳解的PDF文件都可以免費分享給大家,幫小編三連一下文章後,掃描下方免費領取!
相關文章
- 好程式設計師Java培訓分享Java多執行緒常見面試問題程式設計師Java執行緒面試
- 好程式設計師Java教程分享Java多執行緒常見面試題程式設計師Java執行緒面試題
- Java多執行緒程式設計中的常見問題及最佳化策略Java執行緒程式設計
- win10音響雜音滋滋怎麼辦 win10電腦音響有嘖嘖的雜音修復方法Win10
- Java程式設計師面試常見問題Java程式設計師面試
- 【多執行緒】常見問題簡單總結執行緒
- java多執行緒程式設計問題以及解決辦法Java執行緒程式設計
- 好程式設計師Java培訓分享Java多執行緒程式設計師Java執行緒
- 好程式設計師分享:Java面試題常見問題程式設計師Java面試題
- 好程式設計師Java培訓分享Java多執行緒併發程式設計師Java執行緒
- Java面試中,一些常見的有關多執行緒問題!Java面試執行緒
- 談談這幾個常見的多執行緒面試題執行緒面試題
- 【面經】多執行緒常見面試題執行緒面試題
- Java多執行緒程式設計(同步、死鎖、生產消費者問題)Java執行緒程式設計
- Java多執行緒程式設計—鎖優化Java執行緒程式設計優化
- 使用Java實現多執行緒程式設計Java執行緒程式設計
- Java-基礎程式設計-多執行緒Java程式設計執行緒
- Java多執行緒中執行緒安全與鎖問題Java執行緒
- 05.java多執行緒問題Java執行緒
- 好程式設計師Java學習路線分享多執行緒概念程式設計師Java執行緒
- Java程式設計師金三銀四求職季,這些多執行緒面試題你會嗎?Java程式設計師求職執行緒面試題
- Java多執行緒學習(七)併發程式設計中一些問題Java執行緒程式設計
- Java 多執行緒與併發程式設計 · Java 工程師必知必會Java執行緒程式設計工程師
- Java多執行緒面試高配問題---多執行緒(3)🧵Java執行緒面試
- python 多執行緒程式設計Python執行緒程式設計
- JavaScript多執行緒程式設計JavaScript執行緒程式設計
- Python多執行緒程式設計Python執行緒程式設計
- Java多執行緒程式設計筆記9:ReentrantReadWriteLockJava執行緒程式設計筆記
- java多執行緒程式設計chap1-2Java執行緒程式設計
- java多執行緒程式設計chap3-4Java執行緒程式設計
- java多執行緒程式設計chap5-7Java執行緒程式設計
- 好程式設計師Java教程分享:Java工程師常見面試題程式設計師Java工程師面試題
- java多執行緒程式設計:你真的瞭解執行緒中斷嗎?Java執行緒程式設計
- Java實驗五: Java多執行緒程式設計(頭歌)Java執行緒程式設計
- 【程式設計師翻身計劃】Java高效能程式設計第一章-Java多執行緒概述程式設計師Java執行緒
- 還搞不定Java多執行緒和併發程式設計面試題?你可能需要這一份書單!Java執行緒程式設計面試題
- [短文速讀 -5] 多執行緒程式設計引子:程式、執行緒、執行緒安全執行緒程式設計
- 最常見的15個Java多執行緒,併發面試問題Java執行緒面試