JAVA编程多线程面试常见知识点灵魂拷问(一)
1、對線程池的了解
ThreadPoolExcutor創建線程池,包含七個參數。七個參數分別是核心線程數、最大線程數、任務隊列、等待時間、時間單位、線程工廠、拒絕策略。
任務加入線程池算法流程,若加入線程池的任務數小于核心線程數,則線程池繼續創建線程。當任務持續增加,線程池的任務數大于核心線程數,則線程池會繼續創建線程處理任務。
首先判斷核心線程池是否已滿,若沒有線程池中線程數小于核心線程數,則增加任務,繼續創建線程。若線程池中線程數已達到核心線程數,則將新增任務加入等待隊列。
若等待隊列已滿,則新增線程數,直至達到最大線程數。若繼續增加任務,則根據拒絕策略處理新增的任務??梢詠G棄新增任務。
線程工廠一般寫入線程名,用于日志定位。
平常用Executors工具類創建單個線程池、調度線程池等,主要存在兩個問題。一是等待隊列無線大(Int的最大值),容易擠壓任務,造成內存溢出。二是創建線程無線大,也容易造成內存溢出。
2、線程的生命周期
線程的五種狀態,包括創建、準備、運行、等待、死亡、阻塞。主要方法notify()、notifyall()、wait()、sleep()、run()等。
可通過實現Runnable接口或者繼承Thread類,當然還可以繼承Callable接口,這個接口可以返回異常信息。
通過線程池的submit方法,可以返回一個Future對象,可以獲取線程執行結果。
3、對同步的了解
通過synchronized關鍵字實現同步。synchronized關鍵字具有原子性,能保證順序執行,其余方法執行需要獲取對應鎖才能繼續執行。
常見的是在方法上加synchronized,實現同步方法。其實在非靜態方法上加synchronized,其實是對該實例的加鎖。
若是對靜態方法加synchronized,則是對該類加鎖。也可以創建一個Object對象,作為鎖。
synchronized可以作為同步方法,也可以作為同步代碼塊。經常會問到同步方法和同步代碼塊的區別。同步代碼塊是通過monitorEntry和monitorExit兩個指令表示進入同步代碼塊和退出同步代碼塊。
而同步方法是通過ACC的標識位,代表進入同步方法。二者其實都是通過獲取對象監視器的持有權限來執行代碼。
Jdk1.6后,對底層同步進行了優化,增加了很多鎖,提升了同步的處理效率。
4、volatile關鍵字的理解
volatile關鍵字的作用一是禁止指令重排,二是并發情況下數據的可見性。
并發的幾個特點包括原子性、可見性、有序性。synchronized關鍵字滿足三個特性,而volatile關鍵字只能滿足有序性和可見性。
Java內存模型,多個線程有本地內存,再從本地內存推送到主內存。volatile關鍵字能保證多個線程之間變量的可見性或者說一致性。
指令重排是指JVM可以在處理命令的時候可能會調整指令執行順序,進行優化處理。比如創建一個對象,包括三個步驟,一是開辟分配內存,二是初始化實例,三是指向實例的地址,三個步驟的順序可能會有調整。
5、JAVA內存模型
平常創建的實例分配到堆,其實大致是分為堆內存和棧內存。
線程私有區域以后程序計數器、本地方法棧、虛擬機棧,線程共享區域包括方法區、堆。
方法區主要把控類加載信息、靜態變量、常量等,堆則是實例存放的區域,所有創建的實例都會在這里分配內存。
程序計數器主要是保存方法運行的位置,也就是指令執行的情況。多線程環境下,線程之間會進行切換,當下一個線程得到Cpu的調度時,需要知道上次執行的情況。
本地方法棧則是一些其它語言實現的底層方法,虛擬機棧則是保存方法的變量等信息
6、AQS的了解
AbstractQueuedSynchronizer的縮寫AQS,類在java.util.concurrent.locks包下面。
AQS的核心思想是多個線程請求共享資源,分配不到鎖資源的線程進入隊列,按順序分配資源。常見應用場景包括信號量、CountDownLatch等。
信號量應用場景:線程池核心線程數100,同時請求共享資源,限制共享資源最大并發數為10。這個時候可以通過信號量控制并發數,通過獲取鎖加一,釋放鎖減一,來控制資源分配。
CountDownLatch應用場景:一般用于統計,比如多個任務線程計算各個產品信息,最后需要匯總,這個時候可以通過CountDownLatch來實現,可以阻塞主線程等待任務結束。
內容參考地址:多線程面試常見知識點靈魂拷問(一) - 歪棗網
http://blog.waizaowang.com/java/21.html
總結
以上是生活随笔為你收集整理的JAVA编程多线程面试常见知识点灵魂拷问(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第六周 Word目录和索引
- 下一篇: BCP utility in Sybas