長沙Java培訓(xùn):高并發(fā)編程JUC包面試題及答案
在 Java 5.0 提供了 java.util.concurrent(JUC)包,在此包中增加了在并發(fā)編程中很常用的實(shí)用工具類,用于定義類似于線程的自定義子系統(tǒng),包括線程池、異步 IO 和輕量級任務(wù)框架。下面長沙Java培訓(xùn)機(jī)構(gòu)給大家分享一下高并發(fā)編程JUC包面試題及答案:
(1)多線程和單線程的區(qū)別和聯(lián)系答:在單核 CPU 中,將 CPU 分為很小的時(shí)間片,在每一時(shí)刻只能有一個(gè)線程在執(zhí)行,是一種微觀上輪流占用 CPU 的機(jī)制。多線程會存在線程上下文切換,會導(dǎo)致程序執(zhí)行速度變慢,即采用一個(gè)擁有兩個(gè)線程的進(jìn)程執(zhí)行所需要的時(shí)間比一個(gè)線程的進(jìn)程執(zhí)行兩次所需要的時(shí)間要多一些。結(jié)論:即采用多線程不會提高程序的執(zhí)行速度,反而會降低速度,但是對于用戶來說,可以減少用戶的響應(yīng)時(shí)間。
(2)如何指定多個(gè)線程的執(zhí)行順序?解析:面試官會舉例子,如何讓 10 個(gè)線程按照順序打印 0123456789?(寫代碼實(shí)現(xiàn))答:設(shè)定一個(gè) orderNum,每個(gè)線程執(zhí)行結(jié)束之后,更新 orderNum,指明下一個(gè)要執(zhí)行的線程,并且喚醒所有的等待線程。在每一個(gè)線程的開始,要 while 判斷 orderNum 是否等于自己的要求值!不是,則 wait,是則執(zhí)行本線程。
(3)線程和進(jìn)程的區(qū)別是什么(必考)答:進(jìn)程是一個(gè)“執(zhí)行中的程序”,是系統(tǒng)進(jìn)行資源分配和調(diào)度的一個(gè)獨(dú)立單位。線程是進(jìn)程的一個(gè)實(shí)體,一個(gè)進(jìn)程中擁有多個(gè)線程,線程之間共享地址空間和其他資源(因此通信和同步等操作線程比進(jìn)程更加容易)線程上下文的切換比進(jìn)程上下文切換要快很多:進(jìn)程切換時(shí),涉及到當(dāng)前進(jìn)程的 CPU 環(huán)境的保存和新被調(diào)度運(yùn)行進(jìn)程的 CPU 環(huán)境的設(shè)置;線程切換僅需要保存和設(shè)置少量的寄存器內(nèi)容,不涉及存儲管理方面的操作。
(4)多線程產(chǎn)生死鎖的 4 個(gè)必要條件?答:互斥條件:一個(gè)資源每次只能被一個(gè)線程使用請求與保持條件:一個(gè)線程因請求資源而阻塞時(shí),對已獲得的資源保持不放不剝奪條件:進(jìn)程已經(jīng)獲得的資源,在未使用完之前,不能強(qiáng)行剝奪循環(huán)等待條件:若干線程之間形成一種頭尾相接的循環(huán)等待資源關(guān)系接問:如何避免死鎖?(經(jīng)常問)答:指定獲取鎖的順序,舉例如下:比如某個(gè)線程只有獲得 A 鎖和 B 鎖才能對某資源進(jìn)行操作,在多線程條件下,如何避免死鎖?獲得鎖的順序是一定的,比如規(guī)定,只有獲得 A 鎖的線程才有資格獲取 B 鎖,按順序獲取鎖就可以避免死鎖!
(5)sleep( ) 和 wait(n)、wait( ) 的區(qū)別是什么?答:sleep() 方法:是 Thread 類的靜態(tài)方法,當(dāng)前線程將睡眠 n 毫秒,線程進(jìn)入阻塞狀態(tài)。當(dāng)睡眠時(shí)間到了,會解除阻塞,進(jìn)行可運(yùn)行狀態(tài),等待 CPU 的到來(睡眠不釋放鎖,如果有的話)。wait() 方法:是 Object 的方法,必須與 synchronized 關(guān)鍵字一起使用,線程進(jìn)入阻塞狀態(tài),當(dāng) notify 或者 notifyall 被調(diào)用后,會解除阻塞。但是,只有重新占用互斥鎖之后才會進(jìn)入可運(yùn)行狀態(tài)。睡眠時(shí),釋放互斥鎖。
(6)synchronized 關(guān)鍵字是什么?答:底層實(shí)現(xiàn):進(jìn)入時(shí),執(zhí)行 monitorenter,將計(jì)數(shù)器 +1,釋放鎖 monitorexit 時(shí),計(jì)數(shù)器 −1;當(dāng)一個(gè)線程判斷到計(jì)數(shù)器為 0 時(shí),則當(dāng)前鎖空閑,可以占用;反之,當(dāng)前線程進(jìn)入等待狀態(tài)。含義:(monitor 機(jī)制)Synchronized 是在加鎖,加對象鎖。對象鎖是一種重量鎖(Monitor),Synchronized 的鎖機(jī)制會根據(jù)線程競爭情況在運(yùn)行時(shí)會有偏向鎖(單一線程)、輕量鎖(多個(gè)線程訪問 Synchronized 區(qū)域)、對象鎖(重量鎖,多個(gè)線程存在競爭的情況)、自旋鎖等,該關(guān)鍵字是一個(gè)幾種鎖的封裝。
(7)volatile 關(guān)鍵字答:該關(guān)鍵字可以保證可見性不保證原子性。功能:主內(nèi)存和工作內(nèi)存,直接與主內(nèi)存產(chǎn)生交互,進(jìn)行讀寫操作,保證可見性禁止 JVM 進(jìn)行的指令重排序解析:關(guān)于指令重排序的問題,可以查閱 DCL 雙檢鎖失效相關(guān)資料。
(8)Atomic 關(guān)鍵字答:可以使基本數(shù)據(jù)類型以原子的方式實(shí)現(xiàn)自增自減等操作,具體可參考我的博客:concurrent.atomic 包下的類 AtomicInteger 的使用。

猜你喜歡LIKE
最新文章NEW
相關(guān)推薦HOT
更多>>熱門推薦
參加完長沙Java培訓(xùn)班之后怎么面試找工作?
沸參加長沙IT培訓(xùn)好找工作嗎?這些環(huán)節(jié)能刷掉70%大學(xué)生
熱參加長沙Java培訓(xùn)跳槽去大廠,都有哪些面試要求?
熱千鋒長沙前端培訓(xùn)分享之高級前端面試題整理
新千鋒長沙前端培訓(xùn)分享之中級前端面試題整理
千鋒長沙前端培訓(xùn)分享之初級前端面試題整理
千鋒長沙前端培訓(xùn):Vue相關(guān)面試題
長沙Java培訓(xùn):高并發(fā)編程JUC包面試題及答案
長沙Java培訓(xùn):Java開發(fā)實(shí)用的面試題及答案
長沙Java培訓(xùn):2021年Java面試題分享
長沙Java培訓(xùn):2021Java面試題分享
長沙千鋒整理:軟件測試中頻率最高的網(wǎng)絡(luò)協(xié)議面試題,收好了!
長沙IT培訓(xùn)學(xué)員整理:程序員面試10條潛規(guī)則
自學(xué)前端靠這份面試題和答案,也能拿高薪!
技術(shù)干貨







快速通道 更多>>
-
課程介紹
點(diǎn)擊獲取大綱 -
就業(yè)前景
查看就業(yè)薪資 -
學(xué)習(xí)費(fèi)用
了解課程價(jià)格 -
優(yōu)惠活動
領(lǐng)取優(yōu)惠券 -
學(xué)習(xí)資源
領(lǐng)3000G教程 -
師資團(tuán)隊(duì)
了解師資團(tuán)隊(duì) -
實(shí)戰(zhàn)項(xiàng)目
獲取項(xiàng)目源碼 -
開班地區(qū)
查看來校路線