黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

專(zhuān)注Java教育14年 全國(guó)咨詢/投訴熱線:400-8080-105
動(dòng)力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁(yè) 學(xué)習(xí)攻略 職業(yè)指南 大廠級(jí)別的多線程面試題

大廠級(jí)別的多線程面試題

更新時(shí)間:2022-12-21 15:36:22 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽1254次

1、什么是線程和進(jìn)程?

進(jìn)程:在操作系統(tǒng)中能夠獨(dú)立運(yùn)行,并且作為資源分配的基本單位。它表示運(yùn)行中的程序。系統(tǒng)運(yùn)行一個(gè)程序就是一個(gè)進(jìn)程從創(chuàng)建、運(yùn)行到消亡的過(guò)程。

線程:是一個(gè)比進(jìn)程更小的執(zhí)行單位,能夠完成進(jìn)程中的一個(gè)功能,也被稱為輕量級(jí)進(jìn)程。一個(gè)進(jìn)程在其執(zhí)行的過(guò)程中可以產(chǎn)生多個(gè)線程。

【注】線程與進(jìn)程不同的是:同類(lèi)的多個(gè)線程共享進(jìn)程的堆和方法區(qū)資源,但每個(gè)線程有自己的程序計(jì)數(shù)器、虛擬機(jī)棧和本地方法棧,所以系統(tǒng)在產(chǎn)生一個(gè)線程,或是在各個(gè)線程之間作切換工作時(shí),負(fù)擔(dān)要比進(jìn)程小得多。

多線程面試題

為什么程序計(jì)數(shù)器、虛擬機(jī)棧和本地方法棧是線程私有的呢?為什么堆和方法區(qū)是線程共享的呢?

  • 程序計(jì)數(shù)器為什么是私有的?

程序計(jì)數(shù)器主要有下面兩個(gè)作用:

字節(jié)碼解釋器通過(guò)改變程序計(jì)數(shù)器來(lái)依次讀取指令,從而實(shí)現(xiàn)代碼的流程控制,如:順序執(zhí)行、選擇、循環(huán)、異常處理。

在多線程的情況下,程序計(jì)數(shù)器用于記錄當(dāng)前線程執(zhí)行的位置,從而當(dāng)線程被切換回來(lái)的時(shí)候能夠知道該線程上次運(yùn)行到哪兒了。

(需要注意的是,如果執(zhí)行的是 native 方法,那么程序計(jì)數(shù)器記錄的是 undefined 地址,只有執(zhí)行的是 Java 代碼時(shí)程序計(jì)數(shù)器記錄的才是下一條指令的地址。)

所以,程序計(jì)數(shù)器私有主要是為了線程切換后能恢復(fù)到正確的執(zhí)行位置。

  • 虛擬機(jī)棧和本地方法棧為什么是私有的?

虛擬機(jī)棧: 每個(gè) Java 方法在執(zhí)行的同時(shí)會(huì)創(chuàng)建一個(gè)棧幀用于存儲(chǔ)局部變量表、操作數(shù)棧、常量池引用等信息。從方法調(diào)用直至執(zhí)行完成的過(guò)程,就對(duì)應(yīng)著一個(gè)棧幀在 Java 虛擬機(jī)棧中入棧和出棧的過(guò)程。

本地方法棧: 和虛擬機(jī)棧所發(fā)揮的作用非常相似,區(qū)別是: 虛擬機(jī)棧為虛擬機(jī)執(zhí)行 Java 方法 (也就是字節(jié)碼)服務(wù),而本地方法棧則為虛擬機(jī)使用到的 Native 方法服務(wù)。 在 HotSpot 虛擬機(jī)中和 Java 虛擬機(jī)棧合二為一。

所以,為了保證線程中的局部變量不被別的線程訪問(wèn)到,虛擬機(jī)棧和本地方法棧是線程私有的。

堆和方法區(qū)是所有線程共享的資源,其中:

堆是進(jìn)程中最大的一塊內(nèi)存,主要用于存放新創(chuàng)建的對(duì)象 (所有對(duì)象都在這里分配內(nèi)存)。

方法區(qū)主要用于存放已被加載的類(lèi)信息、常量、靜態(tài)變量、即時(shí)編譯器編譯后的代碼等數(shù)據(jù)。

2、什么是上下文切換?

即使單核處理器也支持多線程執(zhí)行代碼,CPU通過(guò)給每個(gè)線程分配CPU時(shí)間片來(lái)實(shí)現(xiàn)這個(gè)機(jī)制。時(shí)間片是CPU分配給各個(gè)線程的時(shí)間,因?yàn)闀r(shí)間片非常短,所以CPU通過(guò)不停地切換線程執(zhí)行,讓我們感覺(jué)多個(gè)線程是同時(shí)執(zhí)行的。(時(shí)間片一般是幾十毫秒)

CPU通過(guò)時(shí)間片分配算法來(lái)循環(huán)執(zhí)行任務(wù),當(dāng)前任務(wù)執(zhí)行一個(gè)時(shí)間片后會(huì)切換到下一個(gè)任務(wù)。但是,在切換前會(huì)保存上一個(gè)任務(wù)的狀態(tài),以便下次切換回這個(gè)任務(wù)時(shí),可以再加載這個(gè)任務(wù)的狀態(tài)。所以任務(wù)從保存到加載的過(guò)程就是一次上下文切換。上下文切換會(huì)影響多線程的執(zhí)行速度。

3、并發(fā)與并行?

并發(fā)指的是多個(gè)任務(wù)交替進(jìn)行,并行則是指真正意義上的“同時(shí)進(jìn)行”。

實(shí)際上,如果系統(tǒng)內(nèi)只有一個(gè)CPU,使用多線程時(shí),在真實(shí)系統(tǒng)環(huán)境下不能并行,只能通過(guò)切換時(shí)間片的方式交替進(jìn)行,從而并發(fā)執(zhí)行任務(wù)。真正的并行只能出現(xiàn)在擁有多個(gè)CPU的系統(tǒng)中。

4、線程的生命周期和狀態(tài)?(重要!)

Java 線程在運(yùn)行的生命周期中的指定時(shí)刻只可能處于下面 6 種不同狀態(tài)的其中一個(gè)狀態(tài):

初始狀態(tài)、運(yùn)行狀態(tài)、阻塞狀態(tài)、等待狀態(tài)、超時(shí)等待狀態(tài)、終止?fàn)顟B(tài)

多線程面試題

線程在生命周期中并不是固定處于某一個(gè)狀態(tài)而是隨著代碼的執(zhí)行在不同狀態(tài)之間切換:

多線程面試題

  • 線程創(chuàng)建之后它將處于 初始狀態(tài)(NEW),調(diào)用 start() 方法后開(kāi)始運(yùn)行,線程這時(shí)候處于 可運(yùn)行狀態(tài)(READY)。
  • 可運(yùn)行狀態(tài)的線程獲得了 CPU 時(shí)間片后就處于 運(yùn)行狀態(tài)(RUNNING)。
  • 當(dāng)線程執(zhí)行 wait()方法之后,線程進(jìn)入 等待狀態(tài)(WAITING),進(jìn)入等待狀態(tài)的線程需要依靠其他線程的通知才能夠返回到運(yùn)行狀態(tài)【notify()】。 而 超時(shí)等待狀態(tài)(TIME_WAITING)相當(dāng)于在等待狀態(tài)的基礎(chǔ)上增加了超時(shí)限制,【sleep(long millis)/wait(long millis)】,當(dāng)超時(shí)時(shí)間到達(dá)后 Java 線程將會(huì)返回到運(yùn)行狀態(tài)。
  • 當(dāng)線程調(diào)用同步方法時(shí),在沒(méi)有獲取到鎖的情況下,線程將會(huì)進(jìn)入到阻塞狀態(tài)(BLOCKED)。
  • 線程在執(zhí)行 Runnable 的run()方法之后將會(huì)進(jìn)入到 終止?fàn)顟B(tài)(TERMINATED)。

5、什么是線程死鎖?如何避免死鎖?

多個(gè)線程同時(shí)被阻塞,它們中的一個(gè)或者全部都在等待某個(gè)資源被釋放。由于線程被無(wú)限期地阻塞,因此程序不可能正常終止。

假如線程 A 持有資源 2,線程 B 持有資源 1,他們同時(shí)都想申請(qǐng)對(duì)方的資源,所以這兩個(gè)線程就會(huì)互相等待而進(jìn)入死鎖狀態(tài)。

避免死鎖的幾個(gè)常見(jiàn)方法:

  • 避免一個(gè)線程同時(shí)獲取多個(gè)鎖
  • 避免一個(gè)線程在鎖內(nèi)同時(shí)占用多個(gè)資源,盡量保證每個(gè)鎖只占用一個(gè)資源。
  • 嘗試使用定時(shí)鎖,使用 lock.tryLock(timeout) 來(lái)代替使用內(nèi)部鎖機(jī)制。
  • 對(duì)于數(shù)據(jù)庫(kù)鎖,加鎖和解鎖必須在一個(gè)數(shù)據(jù)庫(kù)連接里,否則會(huì)出現(xiàn)解鎖失敗的情況。

 以上就是“大廠級(jí)別的多線程面試題”,你能回答上來(lái)嗎?如果想要了解更多的Java面試題相關(guān)內(nèi)容,可以關(guān)注動(dòng)力節(jié)點(diǎn)Java官網(wǎng)。

提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)

  • 全國(guó)校區(qū) 2025-05-15 搶座中
  • 全國(guó)校區(qū) 2025-06-05 搶座中
  • 全國(guó)校區(qū) 2025-06-26 搶座中
免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 国产三级视频在线 | 亚洲一区二区福利视频 | 一级看片免费视频囗交 | 人成在线| 一级毛片影院 | www.精品| 亚欧成人一区二区 | 亚洲伦理剧 | 日本又色又爽又黄的大片 | 男人香蕉好大好爽视频 | 最近中文2019字幕第二页 | 一级做a爰片久久毛片免费看 | 在线观看永久免费 | 欧美国产日韩久久久 | 国产无圣光高清一区二区 | 99激情 | 男女无遮挡毛片免费视频 | 成人一区视频 | 波多结衣一区二区三区 | 精品一区二区视频在线观看 | 日本欧美在线观看 | 欧美亚洲国产一区二区三区 | 高h猛烈做哭bl壮汉受小说 | 日本宅男午夜免费永久网站 | 日韩在线激情 | 成人毛片网站 | 亚洲一区 在线播放 | 天堂网亚洲 | 97色老99久久九九爱精品 | 欧美日韩视频在线 | 插曲的痛一卡二卡三卡 | 久久天天躁夜夜躁狠狠躁2015 | 日韩毛片免费 | 女性污污18污污 | 欧美在线精品一区二区三区 | 日本资源网 | 九九九热在线精品免费全部 | 欧美日本二区 | 在线观看片成人免费视频 | 视频在线观看网站免费 | 亚洲一区二区三区高清视频 |