Java多線程方面的問題

不管大大小小的面試,幾乎都會問到多線程的問題,自己也吃過很多虧,所以抽時間整理一下關於多線程相關的面試常見的一些問題,做個筆記,方便日後快速查閱。

1、什麼是多線程及使用多線程有什麼優缺點?

概念: 多線程是指從軟件或者硬件上實現多個線程併發執行的技術,具有多線程能力的計算機有硬件支持而能夠在同一時間執行多個線程,進而提升整體處理性能;通俗講也就是多個線程同時處理我們待處理的任務,從而提高效率。

優點: 能夠在一定程度上提高響應速度;在多核的情況下可以充分利用CPU資源;

缺點: 需要更多的內存,增加了調度和管理的開銷;具有一些不確定性,可能給程序帶來一些bug;需要複雜的同步機制;容易發生死鎖,每個線程要執行完都需要相應的資源,發生較長時間的等待或資源的競爭容易產生死鎖現象。

2、進程和線程的區別?

進程是一個獨立的運行環境,相當於一個程序或者一個應用,是一個應用程序在處理機上的一次執行過程,是一個動態的概念;然而線程是進程中的一部分,進程保護多個線程在運行。
進程: 每個進程都有獨立的代碼和數據空間(進程上下文),進程間的切換會有較大的開銷,一個進程包含n個線程;
線程: 同一類線程共享代碼和數據空間(即在同一個進程中的線程),每個線程有獨立的運行棧和程序計數器(PC),線程切換開銷小;

線程和進程一樣都分爲5個階段: 創建 - 就緒 - 運行 - 阻塞 - 終止。

區別: 1、地址空間和其它資源。進程是相互獨立的,不能進行資源共享。但是同一個進程中的多個線程間可以共享,跨進程存在的線程之間的資源也是不可見的;
2、線程之間的切換比進程要快很多;

3、用戶線程和守護線程的區別?

Java中的線程可以分爲兩種:用戶線程(User)和守護線程(Daemon)

用戶線程即我們在Java程序中所創建的一個線程。一個守護線程是在後臺執行的,並且不會阻止JVM終止的線程。當沒有用戶線程在運行的時候,JVM關閉程序並且退出;一個守護線程創建的子線程仍然是守護線程。
任何線程都可以設置爲用戶線程和守護線程。通過Thread.setDaemon(bool on)方法,爲true則把該線程設置爲守護線程,反之則是用戶線程。Thread.setDaemon必須要在Thread.start()之前來調用,不然運行時會拋出異常。

4、怎樣創建一個線程?

在開發過程中,有兩種創建線程的方法:
一個是實現Runnable接口,然後將它傳遞給Thread的構造函數,創建一個Thread對象;
一個是繼承Thread類,直接擴展Thread類來創建多線程;

5、Thread類和Runnable接口的區別?

Thread類和Runnable接口是Java實現多線程的兩個手段;

實現Runnable接口比繼承Thread類具有一定的優勢:
1、Runnable接口 適合多個相同的程序代碼的線程去處理同一資源;
2、Runnable接口 可以避免java中的單繼承限制;
3、Runnable接口 能夠增加程序的健壯性,代碼可以被多個線程共享,代碼和數據獨立。

————- 2017-02-22 22:03 待補充 —————–

發佈了64 篇原創文章 · 獲贊 221 · 訪問量 43萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章