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

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學習攻略 Java學習 Java并發基礎常見面試題總結

Java并發基礎常見面試題總結

更新時間:2020-08-28 15:39:49 來源:動力節點 瀏覽2932次


何為線程?


線程與進程相似,但線程是一個比進程更小的執行單位。一個進程在其執行的過程中可以產生多個線程。與進程不同的是同類的多個線程共享進程的堆和方法區資源,但每個線程有自己的程序計數器、虛擬機棧和本地方法棧,所以系統在產生一個線程,或是在各個線程之間作切換工作時,負擔要比進程小得多,也正因為如此,線程也被稱為輕量級進程。


Java程序天生就是多線程程序,我們可以通過JMX來看一下一個普通的Java程序有哪些線程,代碼如下。

public class MultiThread {
	public static void main(String[] args) {
		// 獲取 Java 線程管理 MXBean
	ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean();
		// 不需要獲取同步的 monitor 和 synchronizer 信息,僅獲取線程和線程堆棧信息
		ThreadInfo[] threadInfos = threadMXBean.dumpAllThreads(false, false);
		// 遍歷線程信息,僅打印線程 ID 和線程名稱信息
		for (ThreadInfo threadInfo : threadInfos) {
			System.out.println("[" + threadInfo.getThreadId() + "] " + threadInfo.getThreadName());
		}
	}
}


上述程序輸出如下(輸出內容可能不同,不用太糾結下面每個線程的作用,只用知道 main 線程執行 main 方法即可):


[5] Attach Listener //添加事件

[4] Signal Dispatcher // 分發處理給 JVM 信號的線程

[3] Finalizer //調用對象 finalize 方法的線程

[2] Reference Handler //清除 reference 線程

[1] main //main 線程,程序入口


從上面的輸出內容可以看出:一個 Java 程序的運行是 main 線程和多個其他線程同時運行。


程序計數器為什么是私有的?


程序計數器主要有下面兩個作用:


字節碼解釋器通過改變程序計數器來依次讀取指令,從而實現代碼的流程控制,如:順序執行、選擇、循環、異常處理。


在多線程的情況下,程序計數器用于記錄當前線程執行的位置,從而當線程被切換回來的時候能夠知道該線程上次運行到哪兒了。


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


所以,程序計數器私有主要是為了線程切換后能恢復到正確的執行位置。


虛擬機棧和本地方法棧為什么是私有的?


**虛擬機棧:**每個Java方法在執行的同時會創建一個棧幀用于存儲局部變量表、操作數棧、常量池引用等信息。從方法調用直至執行完成的過程,就對應著一個棧幀在Java虛擬機棧中入棧和出棧的過程。


**本地方法棧:**和虛擬機棧所發揮的作用非常相似,區別是:虛擬機棧為虛擬機執行Java方法(也就是字節碼)服務,而本地方法棧則為虛擬機使用到的Native方法服務。在HotSpot虛擬機中和Java虛擬機棧合二為一。


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


說說并發與并行的區別?


并發:同一時間段,多個任務都在執行(單位時間內不一定同時執行);


并行:單位時間內,多個任務同時執行。


為什么要使用多線程呢?


先從總體上來說:


從計算機底層來說:線程可以比作是輕量級的進程,是程序執行的最小單位,線程間的切換和調度的成本遠遠小于進程。另外,多核CPU時代意味著多個線程可以同時運行,這減少了線程上下文切換的開銷。


從當代互聯網發展趨勢來說:現在的系統動不動就要求百萬級甚至千萬級的并發量,而多線程并發編程正是開發高并發系統的基礎,利用好多線程機制可以大大提高系統整體的并發能力以及性能。


再深入到計算機底層來探討:


單核時代:在單核時代多線程主要是為了提高CPU和IO設備的綜合利用率。舉個例子:當只有一個線程的時候會導致CPU計算時,IO設備空閑;進行IO操作時,CPU空閑。我們可以簡單地說這兩者的利用率目前都是50%左右。但是當有兩個線程的時候就不一樣了,當一個線程執行CPU計算時,另外一個線程可以進行IO操作,這樣兩個的利用率就可以在理想情況下達到100%了。


多核時代:多核時代多線程主要是為了提高CPU利用率。舉個例子:假如我們要計算一個復雜的任務,我們只用一個線程的話,CPU只會一個CPU核心被利用到,而創建多個線程就可以讓多個CPU核心被利用到,這樣就提高了CPU的利用率。


java并發筆試題


以上就是動力節點java培訓機構的小編針對“Java并發基礎常見面試題總結”的內容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業老師隨時為你服務。


提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 欧美成人免费做真爱大片 | 天堂va在线高清一区 | 亚洲天堂在线播放 | 香蕉乱码成人久久天堂爱免费 | 人人爱天天做夜夜爽 | 亚洲午夜成激人情在线影院 | 最近最中文字幕视频 | 日韩成人免费视频播放 | 翁熄性荡事最新篇王伟忠 | 亚洲精品在线播放视频 | 日本全身露裸无遮挡黄漫画 | 国产精品一区二区三区久久 | 欧美日韩精品一区二区免费看 | 狂野欧美性猛交xxxx | 青草视频在线观看视频 | 夜夜拍拍 | 欧美三级超在线视频 | 国产精品毛片无码 | 久久大香伊蕉在人线国产联合 | 好看的看黄a大片爽爽影院 好黄好猛好爽好痛的视频 好吊爽在线播放视频 | 久久精品最新免费国产成人 | 中文字幕成人免费视频 | 成人精品在线视频 | 欧美高清在线精品一区 | 日本的黄色录像 | 国产精品1024免费看 | 波多野结衣在线观看网址 | 国产一区二区三区在线观看视频 | 午夜激情网站 | 欧美激情综合色综合啪啪五月 | 久久久久久久久网站 | 欧美老妇69交 | 国产亚洲精品仙踪林在线播放 | 亚州人成网在线播放 | 免费高清不卡毛片在线看 | 久久久视| 久久99综合| 久久国产欧美日韩精品 | 亚洲日本va中文字幕线 | 舔插视频 | 在线你懂 |