1.串行與併發;進程和線程
串行:當有多個任務需要執行的時候,多個任務之間是按照一定的順序執行的。
併發:多個任務同時執行。
程序中串行和併發是同時存在的。
進程和線程都是爲了實現併發而存在的,
2.創建線程的方式及實現
4.說說 CountDownLatch、CyclicBarrier 原理和區別
java 同時啓動多個線程
7.ThreadLocal 原理分析,ThreadLocal爲什麼會出現OOM,出現的深層次原理
ThreadLocal 用來保存線程獨享的數據
8.講講線程池的實現原理
9.線程池的幾種實現方式
繼承Tread
10.線程的生命週期,狀態是如何轉移的 可參考:《Java多線程編程核心技術》
11.說說線程安全問題,什麼是線程安全,如何保證線程安全
12.線程安全
就是多線程訪問同一代碼,不會產生不確定結果。(比如死鎖)
13.如何避免死鎖
1. 控制加鎖的順序
2.設置加鎖超時時間
14.使用synchronized同步代碼塊,或者用Lock鎖
15.多線程併發情況下,線程共享的變量改爲方法局部級變量
16.產生死鎖的四個條件(互斥、請求與保持、不剝奪、循環等待)
兩個或兩個以上的線程,同時訪問相同的資源,互相持有對方需要訪問的實例,處於互相等待對方釋放的狀態下會發生死鎖。
17.如何檢查死鎖(通過jConsole檢查死鎖)
19.volatile 實現原理(禁止指令重排、刷新內存)
20.synchronized 實現原理(對象監視器)
21.synchronized 與 lock 的區別
synchronized 是一個關鍵字,會自動釋放鎖
lock是一個類,它提供了更多的方法,可以處理一些異常情況,比如說設定加鎖超時時間,讀取文件不衝突情況下可以一異步,而寫文件時加鎖同步。
需要主動去釋放鎖,不然會出現死鎖
27.Java 8並法包下常見的併發類
28.設計5個線程,讓這5個線程同時啓動, 說一下思路
29.設計4個線程,兩個線程向集合A中添加數據,另外兩個線程從集合A中移除數據,手寫代碼( 遇到兩次筆試 )
30.講講ThreadLocal的實現原理;作爲變量的線程隔離方式,其內部是和做的?
31.講講獨佔鎖ReetrantLock 原理
32.讀寫鎖 ReetrantReadWriteLock原理?