前言
編寫正確的程序並不容易,而編寫正常的併發程序就更難了。相比於順序執行的狀況,多線程的線程安全問題是微妙並且出乎意料的,由於在沒有進行適當同步的狀況下多線程中各個操做的順序是不可預期的。java
併發編程相比 Java 中其餘知識點學習起來門檻相對較高,學習起來比較費勁,從而致使不少人望而卻步;而不管是職場面試和高併發高流量的系統的實現卻都還離不開併發編程,從而致使可以真正掌握併發編程的人才成爲市場比較迫切需求的。所以Java 併發問題也老是各個大廠面試的重點之一。在面試中,也發現不少面試者對一些基本的併發概念表示沒聽過,或者是原理不理解,還有的只知其一不知其二,最後致使面試失敗的結果。程序員
在這結合一些實際中遇到的面試題和學習併發編程上的重點問題,來聊聊java併發中所須要學習的知識點。面試
併發編程基礎相關問題
什麼是多線程併發和並行?算法
什麼是線程安全問題?編程
什麼是共享變量的內存可見性問題?數組
什麼是Java中原子性操做?安全
什麼是Java中的CAS操做,AtomicLong實現原理?多線程
什麼是Java指令重排序?併發
Java中Synchronized關鍵字的內存語義是什麼?框架
Java中Volatile關鍵字的內存語義是什麼?
什麼是僞共享,爲什麼會出現,以及如何避免?
什麼是可重入鎖、樂觀鎖、悲觀鎖、公平鎖、非公平鎖、獨佔鎖、共享鎖?
ThreadLocal 相關問題
講講ThreadLocal 的實現原理?
ThreadLocal 做爲變量的線程隔離方式,其內部是如何作的?
說說InheritableThreadLocal 的實現原理?
InheritableThreadLocal 是如何彌補 ThreadLocal 不支持繼承的特性?
CyclicBarrier內部的實現與 CountDownLatch 有何不一樣?
隨機數生成器 Random 類如何使用 CAS 算法保證多線程下新種子的惟一性?
ThreadLocalRandom 是如何利用 ThreadLocal 的原理來解決 Random 的侷限性?
Spring 框架中如何使用 ThreadLocal 實現 request scope 做用域 Bean?
鎖相關問題
併發包中鎖的實現底層(對AQS的理解)?
講講獨佔鎖 ReentrantLock 原理?
談談讀寫鎖 ReentrantReadWriteLock 原理?
StampedLock 鎖原理的理解?
併發隊列相關問題
談下對基於鏈表的非阻塞無界隊列 ConcurrentLinkedQueue 原理的理解?
ConcurrentLinkedQueue 內部是如何使用 CAS 非阻塞算法來保證多線程下入隊出隊操做的線程安全?
基於鏈表的阻塞隊列 LinkedBlockingQueue 原理。
阻塞隊列LinkedBlockingQueue 內部是如何使用兩個獨佔鎖 ReentrantLock 以及對應的條件變量保證多線程先入隊出隊操做的線程安全?
爲何不使用一把鎖,使用兩把爲什麼能提升併發度?
基於數組的阻塞隊列 ArrayBlockingQueue 原理。
ArrayBlockingQueue 內部如何基於一把獨佔鎖以及對應的兩個條件變量實現出入隊操做的線程安全?
談談對無界優先級隊列 PriorityBlockingQueue 原理?
PriorityBlockingQueue 內部使用堆算法保證每次出隊都是優先級最高的元素,元素入隊時候是如何建堆的,元素出隊後如何調整堆的平衡的?
JUC 包中線程同步器相關問題
分析下JUC 中倒數計數器 CountDownLatch 的使用與原理?
CountDownLatch 與線程的 Join 方法區別是什麼?
講講對JUC 中迴環屏障 CyclicBarrier 的使用?
CyclicBarrier內部的實現與 CountDownLatch 有何不一樣?
Semaphore 的內部實現是怎樣的?
簡單對比同步器實現,談談你的見解?
併發組件CopyOnWriteArrayList 是如何經過寫時拷貝實現併發安全的 List?
談談如何系統的學習併發編程
併發編程是Java程序員最重要的技能之一,也是最難掌握的一種技能它要求編程者對計算機最底層的運做原理有深入的理解,同時要求編程者邏輯清晰、思惟縝密,這樣才能寫出高效、安全可靠的多線程併發程序。學習java併發就像進入了另一個學習領域,就像學習一門新的編程語言,或者是學習一套新的語言概念,要理解併發編程,其難度跟理解面向對象編程難度差很少。你花一點功夫,就能夠理解它的基本機制,可是要想真正掌握它的本質,就須要深刻的學習與理解。在這在分享一個併發編程知識給你們!
高併發編程專題-多線程通訊原理
連接: httpspan.baidu.coms1a18UcSiShfaNJtGtO9SgEA
提取碼:35yj
更多資料領取方式:轉發+關注,加QQ羣:714526711羣文件可直接領取【以爲文章還不錯的能夠關注一下哦,走過路過,纔不會錯過】