<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>

    千鋒教育-做有情懷、有良心、有品質的職業教育機構

    400-811-9990
    手機站
    千鋒教育

    千鋒學習站 | 隨時隨地免費學

    千鋒教育

    掃一掃進入千鋒手機站

    領取全套視頻
    千鋒教育

    關注千鋒學習站小程序
    隨時隨地免費學習課程

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

    長沙Java培訓:高并發編程JUC包面試題及答案

    來源:千鋒教育
    發布人:千鋒長沙
    時間: 2021-11-16 16:17:36

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

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

           (1)多線程和單線程的區別和聯系答:在單核 CPU 中,將 CPU 分為很小的時間片,在每一時刻只能有一個線程在執行,是一種微觀上輪流占用 CPU 的機制。多線程會存在線程上下文切換,會導致程序執行速度變慢,即采用一個擁有兩個線程的進程執行所需要的時間比一個線程的進程執行兩次所需要的時間要多一些。結論:即采用多線程不會提高程序的執行速度,反而會降低速度,但是對于用戶來說,可以減少用戶的響應時間。

           (2)如何指定多個線程的執行順序?解析:面試官會舉例子,如何讓 10 個線程按照順序打印 0123456789?(寫代碼實現)答:設定一個 orderNum,每個線程執行結束之后,更新 orderNum,指明下一個要執行的線程,并且喚醒所有的等待線程。在每一個線程的開始,要 while 判斷 orderNum 是否等于自己的要求值!不是,則 wait,是則執行本線程。

           (3)線程和進程的區別是什么(必考)答:進程是一個“執行中的程序”,是系統進行資源分配和調度的一個獨立單位。線程是進程的一個實體,一個進程中擁有多個線程,線程之間共享地址空間和其他資源(因此通信和同步等操作線程比進程更加容易)線程上下文的切換比進程上下文切換要快很多:進程切換時,涉及到當前進程的 CPU 環境的保存和新被調度運行進程的 CPU 環境的設置;線程切換僅需要保存和設置少量的寄存器內容,不涉及存儲管理方面的操作。

           (4)多線程產生死鎖的 4 個必要條件?答:互斥條件:一個資源每次只能被一個線程使用請求與保持條件:一個線程因請求資源而阻塞時,對已獲得的資源保持不放不剝奪條件:進程已經獲得的資源,在未使用完之前,不能強行剝奪循環等待條件:若干線程之間形成一種頭尾相接的循環等待資源關系接問:如何避免死鎖?(經常問)答:指定獲取鎖的順序,舉例如下:比如某個線程只有獲得 A 鎖和 B 鎖才能對某資源進行操作,在多線程條件下,如何避免死鎖?獲得鎖的順序是一定的,比如規定,只有獲得 A 鎖的線程才有資格獲取 B 鎖,按順序獲取鎖就可以避免死鎖!

           (5)sleep( ) 和 wait(n)、wait( ) 的區別是什么?答:sleep() 方法:是 Thread 類的靜態方法,當前線程將睡眠 n 毫秒,線程進入阻塞狀態。當睡眠時間到了,會解除阻塞,進行可運行狀態,等待 CPU 的到來(睡眠不釋放鎖,如果有的話)。wait() 方法:是 Object 的方法,必須與 synchronized 關鍵字一起使用,線程進入阻塞狀態,當 notify 或者 notifyall 被調用后,會解除阻塞。但是,只有重新占用互斥鎖之后才會進入可運行狀態。睡眠時,釋放互斥鎖。

           (6)synchronized 關鍵字是什么?答:底層實現:進入時,執行 monitorenter,將計數器 +1,釋放鎖 monitorexit 時,計數器 −1;當一個線程判斷到計數器為 0 時,則當前鎖空閑,可以占用;反之,當前線程進入等待狀態。含義:(monitor 機制)Synchronized 是在加鎖,加對象鎖。對象鎖是一種重量鎖(Monitor),Synchronized 的鎖機制會根據線程競爭情況在運行時會有偏向鎖(單一線程)、輕量鎖(多個線程訪問 Synchronized 區域)、對象鎖(重量鎖,多個線程存在競爭的情況)、自旋鎖等,該關鍵字是一個幾種鎖的封裝。

           (7)volatile 關鍵字答:該關鍵字可以保證可見性不保證原子性。功能:主內存和工作內存,直接與主內存產生交互,進行讀寫操作,保證可見性禁止 JVM 進行的指令重排序解析:關于指令重排序的問題,可以查閱 DCL 雙檢鎖失效相關資料。

           (8)Atomic 關鍵字答:可以使基本數據類型以原子的方式實現自增自減等操作,具體可參考我的博客:concurrent.atomic 包下的類 AtomicInteger 的使用。

    聲明:本站稿件版權均屬千鋒教育所有,未經許可不得擅自轉載。

    猜你喜歡LIKE

    最新文章NEW

    相關推薦HOT

    更多>>

    快速通道 更多>>

    最新開班信息 更多>>

    網友熱搜 更多>>