好程序員Java培訓分享Java多線程學習,Java程序員多線程學習。
1.1.多線程基礎什么是線程和進程? 線程與進程的關系,區(qū)別及優(yōu)缺點?
說說并發(fā)與并行的區(qū)別?
為什么要使用多線程呢?
使用多線程可能帶來什么問題?(內(nèi)存泄漏、死鎖、線程不安全等等)
創(chuàng)建線程有哪幾種方式?(a.繼承 Thread 類;b.實現(xiàn) Runnable 接口;c. 使用 Executor 框架;d.使用 FutureTask)
說說線程的生命周期和狀態(tài)?
什么是上下文切換?
什么是線程死鎖?如何避免死鎖?
說說 sleep() 方法和 wait() 方法區(qū)別和共同點?
為什么我們調(diào)用 start() 方法時會執(zhí)行 run() 方法,為什么我們不能直接調(diào)用 run() 方法?
1.2.多線程知識進階volatile 關鍵字
Java 內(nèi)存模型(JMM);
重排序與 happens-before 原則了解嗎?
volatile 關鍵字的作用;
說說 synchronized 關鍵字和 volatile 關鍵字的區(qū)別;
ThreadLocal
有啥用(解決了什么問題)?怎么用?
原理了解嗎?
內(nèi)存泄露問題了解嗎?
線程池
為什么要用線程池?
你會使用線程池嗎?
如何創(chuàng)建線程池比較好?(推薦使用 ThreadPoolExecutor 構造函數(shù)創(chuàng)建線程池)
ThreadPoolExecutor 類的重要參數(shù)了解嗎?ThreadPoolExecutor 飽和策略了解嗎?
線程池原理了解嗎?
幾種常見的線程池了解嗎?為什么不推薦使用FixedThreadPool?
如何設置線程池的大?。?/p>
AQS
簡介
原理
AQS 常用組件。
Semaphore(信號量)-允許多個線程同時訪問
CountDownLatch (倒計時器)-CountDownLatch 允許 count 個線程阻塞在一個地方,直至所有線程的任務都執(zhí)行完畢。
CyclicBarrier(循環(huán)柵欄)-CyclicBarrier 和 CountDownLatch 非常類似,它也可以實現(xiàn)線程間的技術等待,但是它的功能比 CountDownLatch 更加復雜和強大。主要應用場景和 CountDownLatch 類似。
ReentrantLock 和 ReentrantReadWriteLock
鎖
鎖的常見分類
可重入鎖和非可重入鎖
公平鎖與非公平鎖
讀寫鎖和排它鎖
synchronized 關鍵字
說一說自己對于 synchronized 關鍵字的了解;
說說自己是怎么使用 synchronized 關鍵字,在項目中用到了嗎;
講一下 synchronized 關鍵字的底層原理;
說說 JDK1.6 之后的 synchronized 關鍵字底層做了哪些優(yōu)化,可以詳細介紹一下這些優(yōu)化嗎;
談談 synchronized 和 ReentrantLock 的區(qū)別;
ReentrantLock 和 ReentrantReadWriteLock
ReadWriteLock
StampedLock(JDK8)
Atomic 與 CAS
CAS:
介紹
原理
Atomic 原子類:
介紹一下 Atomic 原子類;
JUC 包中的原子類是哪 4 類?;
講講 AtomicInteger 的使用;
能不能給我簡單介紹一下 AtomicInteger 類的原理。
并發(fā)容器
JDK 提供的這些容器大部分在 java.util.concurrent 包中。
ConcurrentHashMap: 線程安全的 HashMap
CopyOnWriteArrayList: 線程安全的 List,在讀多寫少的場合性能非常好,遠遠好于 Vector.
ConcurrentLinkedQueue: 高效的并發(fā)隊列,使用鏈表實現(xiàn)??梢钥醋鲆粋€線程安全的 LinkedList,這是一個非阻塞隊列。
BlockingQueue: 這是一個接口,JDK 內(nèi)部通過鏈表、數(shù)組等方式實現(xiàn)了這個接口。表示阻塞隊列,非常適合用于作為數(shù)據(jù)共享的通道。
ConcurrentSkipListMap: 跳表的實現(xiàn)。這是一個 Map,使用跳表的數(shù)據(jù)結構進行快速查找。
聯(lián)系客服