<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          【15期】談?wù)勥@幾個常見的多線程面試題

          共 1895字,需瀏覽 4分鐘

           ·

          2020-08-18 02:34

          程序員的成長之路
          互聯(lián)網(wǎng)/程序員/技術(shù)/資料共享?
          關(guān)注


          閱讀本文大概需要 3 分鐘。

          以下幾道題目比較初級,是必須要掌握的多線程基礎(chǔ)面試題。

          創(chuàng)建線程有幾種不同的方式?你喜歡哪一種?為什么?

          有三種方式可以用來創(chuàng)建線程:
          • 繼承Thread類

          • 實(shí)現(xiàn)Runnable接口

          • 應(yīng)用程序可以使用Executor框架來創(chuàng)建線程池

          實(shí)現(xiàn)Runnable接口這種方式更受歡迎,因?yàn)檫@不需要繼承Thread類。在應(yīng)用設(shè)計中已經(jīng)繼承了別的對象的情況下,這需要多繼承(而Java不支持多繼承),只能實(shí)現(xiàn)接口。同時,線程池也是非常高效的,很容易實(shí)現(xiàn)和使用。

          概括的解釋下線程的幾種可用狀態(tài)。

          新建( new ):新創(chuàng)建了一個線程對象;
          可運(yùn)行( runnable ):線程對象創(chuàng)建后,其他線程(比如 main 線程)調(diào)用了該對象的 start ()方法。該狀態(tài)的線程位于可運(yùn)行線程池中,等待被線程調(diào)度選中,獲 取CPU的使用權(quán);
          運(yùn)行( running ):可運(yùn)行狀態(tài)( runnable )的線程獲得了CPU時間片( timeslice ) ,執(zhí)行程序代碼;
          阻塞( block ):阻塞狀態(tài)是指線程因?yàn)槟撤N原因放棄了CPU 使用權(quán),也即讓出了 CPU timeslice ,暫時停止運(yùn)行。直到線程進(jìn)入可運(yùn)行( runnable )狀態(tài),才有 機(jī)會再次獲得 cpu timeslice 轉(zhuǎn)到運(yùn)行( running )狀態(tài)。
          阻塞的情況分三種:
          1. 等待阻塞:運(yùn)行( running )的線程執(zhí)行 o . wait ()方法, JVM 會把該線程放 入等待隊(duì)列( waitting queue )中。

          2. 同步阻塞:運(yùn)行( running )的線程在獲取對象的同步鎖時,若該同步鎖被別的線程占用,則 JVM 會把該線程放入鎖池( lock pool )中。

          3. 其他阻塞: 運(yùn)行( running )的線程執(zhí)行 Thread . sleep ( long ms )或 t . join ()方法,或者發(fā)出了 I / O 請求時, JVM 會把該線程置為阻塞狀態(tài)。當(dāng) sleep ()狀態(tài)超時、 join ()等待線程終止或者超時、或者 I / O 處理完畢時,線程重新轉(zhuǎn)入可運(yùn)行( runnable )狀態(tài)。

          死亡( dead ):線程 run ()、 main () 方法執(zhí)行結(jié)束,或者因異常退出了 run ()方法,則該線程結(jié)束生命周期。死亡的線程不可再次復(fù)生。

          同步方法和同步代碼塊的區(qū)別是什么?

          區(qū)別:
          • 同步方法默認(rèn)用this或者當(dāng)前類class對象作為鎖;

          • 同步代碼塊可以選擇以什么來加鎖,比同步方法要更細(xì)顆粒度,我們可以選擇只同步會發(fā)生同步問題的部分代碼而不是整個方法;

          在監(jiān)視器(Monitor)內(nèi)部,是如何做線程同步的?程序應(yīng)該做哪種級別的同步?

          監(jiān)視器和鎖在Java虛擬機(jī)中是一塊使用的。監(jiān)視器監(jiān)視一塊同步代碼塊,確保一次只有一個線程執(zhí)行同步代碼塊。每一個監(jiān)視器都和一個對象引用相關(guān)聯(lián)。線程在獲取鎖之前不允許執(zhí)行同步代碼。
          java 還提供了顯式監(jiān)視器( Lock )和隱式監(jiān)視器( synchronized )兩種鎖方案。

          什么是死鎖(deadlock)?

          兩個線程或兩個以上線程都在等待對方執(zhí)行完畢才能繼續(xù)往下執(zhí)行的時候就發(fā)生了死鎖。結(jié)果就是這些線程都陷入了無限的等待中。

          如何確保N個線程可以訪問N個資源同時又不導(dǎo)致死鎖?

          多線程產(chǎn)生死鎖的四個必要條件:
          • 互斥條件:一個資源每次只能被一個進(jìn)程使用。

          • 保持和請求條件:一個進(jìn)程因請求資源而阻塞時,對已獲得資源保持不放。

          • 不可剝奪性:進(jìn)程已獲得資源,在未使用完成前,不能被剝奪。

          • 循環(huán)等待條件(閉環(huán)):若干進(jìn)程之間形成一種頭尾相接的循環(huán)等待資源關(guān)系。

          只要破壞其中任意一個條件,就可以避免死鎖
          一種非常簡單的避免死鎖的方式就是:指定獲取鎖的順序,并強(qiáng)制線程按照指定的順序獲取鎖。因此,如果所有的線程都是以同樣的順序加鎖和釋放鎖,就不會出現(xiàn)死鎖了。

          推薦閱讀:

          【14期】你能說說進(jìn)程與線程的區(qū)別嗎

          【13期】談?wù)?Redis 的過期策略

          【12期】談?wù)勴?xiàng)目中單點(diǎn)登錄的實(shí)現(xiàn)原理?

          5T技術(shù)資源大放送!包括但不限于:C/C++,Linux,Python,Java,PHP,人工智能,單片機(jī),樹莓派,等等。在公眾號內(nèi)回復(fù)「2048」,即可免費(fèi)獲取!!

          微信掃描二維碼,關(guān)注我的公眾號

          寫留言

          朕已閱?

          瀏覽 13
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  在线视频第二页 | 13一16女处被毛片视频 | 插入白丝袜舞蹈生妹妹的嫩穴网站 | 日韩亚洲欧美中文高清在线 | 性爱视频福利 |