關於多執行緒的幾個問題(面試小問題,Java篇)

2021-09-02 09:19:17 字數 1000 閱讀 3941

面試官想考考我多執行緒方面的問題。

1、請說下執行緒與程序的關係。

答:《作業系統》中是這樣說的

(1)乙個執行緒只能屬於乙個程序,而乙個程序可以有多個執行緒,但至少有乙個執行緒。執行緒是作業系統可識別的最小執行和排程單位。

(2)資源分配給程序,同一程序的所有執行緒共享該程序的所有資源。同一程序中的多個執行緒共享**段(**和常量),資料段(全域性變數和靜態變數),擴充套件段(堆儲存)。但是每個執行緒擁有自己的棧段,棧段又叫執行時段,用來存放所有區域性變數和臨時變數。

(3)處理機分給執行緒,即真正在處理機上執行的是執行緒。

(4)執行緒在執行過程中,需要協作同步。不同程序的執行緒間要利用訊息通訊的辦法實現同步。

2、請說下執行緒池的概念。

答:執行緒池是一種多執行緒處理形式,處理過程中將任務新增到佇列,然後在建立執行緒後自動啟動這些任務。執行緒池執行緒都是後台執行緒。每個執行緒都使用預設的堆疊大小,以預設的優先順序執行,並處於多執行緒單元中。如果某個執行緒在託管**中空閒(如正在等待某個事件),則執行緒池將插入另乙個輔助線程來使所有處理器保持繁忙。如果所有執行緒池執行緒都始終保持繁忙,但佇列中包含掛起的工作,則執行緒池將在一段時間後建立另乙個輔助線程但執行緒的數目永遠不會超過最大值。超過最大值的執行緒可以排隊,但他們要等到其他執行緒完成後才啟動。

3、請說下nio與多執行緒socket區別

答:這個問題就是在問nio與bio、aio的區別。

io的方式通常分為幾種,同步阻塞的bio、同步非阻塞的nio(selector模型)、非同步非阻塞的aio。

bio是乙個連線乙個執行緒。

nio是乙個請求乙個執行緒。

aio是乙個有效請求乙個執行緒。

傳統的socket io中,需要為每個連線建立乙個執行緒,當併發的連線數量非常巨大時,執行緒所占用的棧記憶體和cpu執行緒切換的開銷將非常巨大。使用nio,不再需要為每個執行緒建立單獨的執行緒,可以用乙個含有限數量執行緒的執行緒池,甚至乙個執行緒來為任意數量的連線服務。由於執行緒數量小於連線數量,所以每個執行緒進行io操作時就不能阻塞,如果阻塞的話,有些連線就得不到處理,nio提供了這種非阻塞的能力。參考

關於面試的幾個小問題

回答樣本 如果是工作需要我會義不容辭加班,我現在單身,沒有任何家庭負擔,可以全身心的投入工作。但同時,我也會提高工作效率,減少不必要的加班。回答樣本一 我對工資沒有硬性要求,我相信貴公司在處理我的問題上會友善合理。我注重的是找對工作機會,所以只要條件公平,我則不會計較太多。回答樣本二 我受過系統的軟...

多執行緒小問題

1 被禁用的一些操作多執行緒的方法 停止多執行緒 public void stop 銷毀多執行緒 public void destroy 掛起執行緒 public final void suspend 恢復掛起 public final void resume 被廢除的主要原因在於這些方法可能會導致...

關於網路的幾個問題

q1 請你分別划划osi的七層網路結構圖,和tcp ip的五層結構圖?1 osi每層功能及特點 a 物理層 為資料鏈路層提供物理連線,在其上序列傳送位元流,即所傳送資料的單位是位元。此外,該層中還具有確定連線裝置的電氣特性和物理特性等功能。b 資料鏈路層 負責在網路節點間的線路上通過檢測 流量控制和...