一、線程和進程的概念、並行和併發的概念html
二、建立線程的方式及實現java
建立線程的三種方式及實現代碼:面試
public class MyThread extends Thread{//繼承Thread類 public void run(){ //重寫run方法 } } public class Main { public static void main(String[] args){ new MyThread().start();//建立並啓動線程 } }
2. 實現Runnable接口建立緩存
public class MyThread2 implements Runnable {//實現Runnable接口 public void run(){ //重寫run方法 } } public class Main { public static void main(String[] args){ //建立並啓動線程 MyThread2 myThread=new MyThread2(); Thread thread=new Thread(myThread); thread().start(); //或者 new Thread(new MyThread2()).start(); } }
3. 使用Callable和Futura建立安全
三、進程間通訊的方式多線程
進程間的通訊(IPC)經常使用方式管道(無名管道和命名管道)、消息隊列、信號量、共享存儲、套接字(Socket)及Streams等。其中 Socket和Streams支持不一樣主機上的兩個進程IPC。併發
四、說說 CountDownLatch、CyclicBarrier 原理和區別工具
原理: 參考:https://blog.csdn.net/wantflydacheng/article/details/81664035
ui
區別:spa
五、說說 Semaphore 工做原理,舉例說明
Semaphore主要用於控制當前活動線程數目,就如同停車場系統通常,而Semaphore則至關於看守的人,用於控制總共容許停車的停車位的個數,而對於每輛車來講就如同一個線程,線程須要經過acquire()方法獲取許可,而release()釋放許可。若是許可數達到最大活動數,那麼調用acquire()以後,便進入等待隊列,等待已得到許可的線程釋放許可,從而使得多線程可以合理的運行
六、說說 Exchanger 原理
Exchanger(交換者)是一個用於線程間協做的工具類。Exchanger用於進行線程間的數據交換。它提供一個同步點,在這個同步點兩個線程能夠交換彼此的數據。這兩個線程經過exchange方法交換數據, 若是第一個線程先執行exchange方法,它會一直等待第二個線程也執行exchange,當兩個線程都到達同步點時,這兩個線程就能夠交換數據,將本線程生產出來的數據傳遞給對方。所以使用Exchanger的重點是成對的線程使用exchange()方法,當有一對線程達到了同步點,就會進行交換數據。所以該工具類的線程對象是成對的。
Exchanger類提供了兩個方法,String exchange(V x):用於交換,啓動交換並等待另外一個線程調用exchange;String exchange(V x,long timeout,TimeUnit unit):用於交換,啓動交換並等待另外一個線程調用exchange,而且設置最大等待時間,當等待時間超過timeout便中止等待。
參考:https://blog.csdn.net/carson0408/article/details/79477280
七、ThreadLocal 原理分析,ThreadLocal爲何會出現OOM,出現的深層次原理
八、講講線程池的實現原理
一個線程集合workerSet和一個阻塞隊列workQueue。當用戶向線程池提交一個任務(也就是線程)時,線程池會先將任務放入workQueue中。workerSet中的線程會不斷的從workQueue中獲取線程而後執行。當workQueue中沒有任務的時候,worker就會阻塞,直到隊 列中有任務了就取出來繼續執行。
幾個重要參數意義:
九、線程池的幾種實現方式
十、線程的生命週期,狀態是如何轉移的
生命週期: 新建(New)、就緒(Runnable)、運行(Running)、阻塞(Blocked)和死亡(Dead)5種狀態
狀態轉移:
1. 新建狀態,當程序使用new關鍵字建立了一個線程以後,該線程就處於新建狀態,此時僅由JVM爲其分配內存,並初始化其成員變量的值
2. 就緒狀態,當線程對象調用了start()方法以後,該線程處於就緒狀態。Java虛擬機會爲其建立方法調用棧和程序計數器,等待調度運行
3. 運行狀態,若是處於就緒狀態的線程得到了CPU,開始執行run()方法的線程執行體,則該線程處於運行狀態
4. 阻塞狀態,當處於運行狀態的線程失去所佔用資源以後,便進入阻塞狀態
5. 在線程的生命週期當中,線程的各類狀態的轉換過程
參考:https://www.cnblogs.com/sunddenly/p/4106562.html
另有線程相關面試題:https://mp.weixin.qq.com/s/rW0H5oez1IfMOtaPBwWGoA(可能和上面的有重複)