<option id="mwy0y"><strong id="mwy0y"></strong></option>
  • <ul id="mwy0y"><sup id="mwy0y"></sup></ul>
  • <ul id="mwy0y"></ul>
  • <del id="mwy0y"><dfn id="mwy0y"></dfn></del><ul id="mwy0y"><sup id="mwy0y"></sup></ul>
  • <abbr id="mwy0y"></abbr>

    千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)

    400-811-9990
    手機(jī)站
    千鋒教育

    千鋒學(xué)習(xí)站 | 隨時(shí)隨地免費(fèi)學(xué)

    千鋒教育

    掃一掃進(jìn)入千鋒手機(jī)站

    領(lǐng)取全套視頻
    千鋒教育

    關(guān)注千鋒學(xué)習(xí)站小程序
    隨時(shí)隨地免費(fèi)學(xué)習(xí)課程

    上海
    • 北京
    • 鄭州
    • 武漢
    • 成都
    • 西安
    • 沈陽
    • 廣州
    • 南京
    • 深圳
    • 大連
    • 青島
    • 杭州
    • 重慶
    當(dāng)前位置:長沙千鋒IT培訓(xùn)  >  面試技巧  >  長沙Java培訓(xùn):高并發(fā)編程JUC包面試題及答案

    長沙Java培訓(xùn):高并發(fā)編程JUC包面試題及答案

    來源:千鋒教育
    發(fā)布人:千鋒長沙
    時(shí)間: 2021-11-16 16:17:36

           在 Java 5.0 提供了 java.util.concurrent(JUC)包,在此包中增加了在并發(fā)編程中很常用的實(shí)用工具類,用于定義類似于線程的自定義子系統(tǒng),包括線程池、異步 IO 和輕量級任務(wù)框架。下面長沙Java培訓(xùn)機(jī)構(gòu)給大家分享一下高并發(fā)編程JUC包面試題及答案:

    src=http___lingbujian.carjob.com.cn_ueditor_image_20191218_1576651090732001042.jpg&refer=http___lingbujian.carjob.com

           (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 的使用。

    聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。

    猜你喜歡LIKE

    最新文章NEW

    相關(guān)推薦HOT

    更多>>

    快速通道 更多>>

    最新開班信息 更多>>

    網(wǎng)友熱搜 更多>>