大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 hot資訊 Java多線程面試題

Java多線程面試題

更新時間:2021-06-02 11:15:36 來源:動力節點 瀏覽1045次

Java面試題

1.什么是線程?

線程是操作系統能夠進行運算調度的最小單位,它被包含在進程之中,是進程中的實際運作單位。程序員可以通過它進行多處理器編程,你可以使用多線程對 運算密集型任務提速。比如,如果一個線程完成一個任務要100毫秒,那么用十個線程完成改任務只需10毫秒。Java在語言層面對多線程提供了卓越的 持,它也是一個很好的賣點。欲了解更多詳細信息請點擊這里。

2.線程和進程有什么區別?

線程是進程的子集,一個進程可以有很多線程,每條線程并行執行不同的任務。不同的進程使用不同的內存空間,而所有的線程共享一片相同的內存空間。別把它和棧內存搞混,每個線程都擁有單獨的棧內存用來存儲本地數據。

3.如何在Java中實現線程?

在語言層面有兩種方式。java.lang.Thread 類的實例就是一個線程但是它需要調用java.lang.Runnable接口來執行,由于線程類本身就是調用的Runnable接口所以你可以繼承 java.lang.Thread 類或者直接調用Runnable接口來重寫run()方法實現線程。

4.用Runnable還是Thread?

這個問題是上題的后續,大家都知道我們可以通過繼承Thread類或者調用Runnable接口來實現線程,問題是,那個方法更好呢?什么情況下使 用它?這個問題很容易回答,如果你知道Java不支持類的多重繼承,但允許你調用多個接口。所以如果你要繼承其他類,當然是調用Runnable接口好了。

5.Thread 類中的start() 和 run() 方法有什么區別?

這個問題經常被問到,但還是能從此區分出面試者對Java線程模型的理解程度。start()方法被用來啟動新創建的線程,而且start()內部 調用了run()方法,這和直接調用run()方法的效果不一樣。當你調用run()方法的時候,只會是在原來的線程中調用,沒有新的線程啟 動,start()方法才會啟動新線程。

6.Java中Runnable和Callable有什么不同?

Runnable和Callable都代表那些要在不同的線程中執行的任務。Runnable從JDK1.0開始就有了,Callable是在 JDK1.5增加的。它們的主要區別是Callable的 call() 方法可以返回值和拋出異常,而Runnable的run()方法沒有這些功能。Callable可以返回裝載有計算結果的Future對象。

7.Java中CyclicBarrier 和 CountDownLatch有什么不同?

CyclicBarrier 和 CountDownLatch 都可以用來讓一組線程等待其它線程。與 CyclicBarrier 不同的是,CountdownLatch 不能重新使用。

8.Java內存模型是什么?

Java內存模型規定和指引Java程序在不同的內存架構、CPU和操作系統間有確定性地行為。它在多線程的情況下尤其重要。Java內存模型對一 個線程所做的變動能被其它線程可見提供了保證,它們之間是先行發生關系。這個關系定義了一些規則讓程序員在并發編程時思路更清晰。比如,先行發生關系確保了:

線程內的代碼能夠按先后順序執行,這被稱為程序次序規則。

對于同一個鎖,一個解鎖操作一定要發生在時間上后發生的另一個鎖定操作之前,也叫做管程鎖定規則。

前一個對volatile的寫操作在后一個volatile的讀操作之前,也叫volatile變量規則。

一個線程內的任何操作必需在這個線程的start()調用之后,也叫作線程啟動規則。

一個線程的所有操作都會在線程終止之前,線程終止規則。

一個對象的終結操作必需在這個對象構造完成之后,也叫對象終結規則。

可傳遞性

9.Java中的volatile 變量是什么?

volatile是一個特殊的修飾符,只有成員變量才能使用它。在Java并發程序缺少同步類的情況下,多線程對成員變量的操作對其它線程是透明的。volatile變量可以保證下一個讀取操作會在前一個寫操作之后發生,就是上一題的volatile變量規則。

10.什么是線程安全?Vector是一個線程安全類嗎?

如果你的代碼所在的進程中有多個線程在同時運行,而這些線程可能會同時運行這段代碼。如果每次運行結果和單線程運行的結果是一樣的,而且其他的變量 的值也和預期的是一樣的,就是線程安全的。一個線程安全的計數器類的同一個實例對象在被多個線程使用的情況下也不會出現計算失誤。很顯然你可以將集合類分 成兩組,線程安全和非線程安全的。Vector 是用同步方法來實現線程安全的, 而和它相似的ArrayList不是線程安全的。

11.Java中什么是競態條件? 舉個例子說明。

競態條件會導致程序在并發情況下出現一些bugs。多線程對一些資源的競爭的時候就會產生競態條件,如果首先要執行的程序競爭失敗排到后面執行了, 那么整個程序就會出現一些不確定的bugs。這種bugs很難發現而且會重復出現,因為線程間的隨機競爭。

12.Java中如何停止一個線程?

Java提供了很豐富的API但沒有為停止線程提供API。JDK 1.0本來有一些像stop(), suspend() 和 resume()的控制方法但是由于潛在的死鎖威脅因此在后續的JDK版本中他們被棄用了,之后Java API的設計者就沒有提供一個兼容且線程安全的方法來停止一個線程。當run() 或者 call() 方法執行完的時候線程會自動結束,如果要手動結束一個線程,你可以用volatile 布爾變量來退出run()方法的循環或者是取消任務來中斷線程。

13.Java中Semaphore是什么?

Java中的Semaphore是一種新的同步類,它是一個計數信號。從概念上講,從概念上講,信號量維護了一個許可集合。如有必要,在許可可用前 會阻塞每一個 acquire(),然后再獲取該許可。每個 release()添加一個許可,從而可能釋放一個正在阻塞的獲取者。但是,不使用實際的許可對象,Semaphore只對可用許可的號碼進行計數,并采 取相應的行動。信號量常常用于多線程的代碼中,比如數據庫連接池。

14.如果你提交任務時,線程池隊列已滿。會時發會生什么?

這個問題問得很狡猾,許多程序員會認為該任務會阻塞直到線程池隊列有空位。事實上如果一個任務不能被調度執行那么ThreadPoolExecutor’s submit()方法將會拋出一個RejectedExecutionException異常。

15.Java線程池中submit() 和 execute()方法有什么區別?

兩個方法都可以向線程池提交任務,execute()方法的返回類型是void,它定義在Executor接口中, 而submit()方法可以返回持有計算結果的Future對象,它定義在ExecutorService接口中,它擴展了Executor接口,其它線 程池類像ThreadPoolExecutor和ScheduledThreadPoolExecutor都有這些方法。

16.什么是阻塞式方法?

阻塞式方法是指程序會一直等待該方法完成期間不做其他事情,ServerSocket的accept()方法就是一直等待客戶端連接。這里的阻塞是 指調用結果返回之前,當前線程會被掛起,直到得到結果之后才會返回。此外,還有異步和非阻塞式方法在任務完成前就返回。

17.Swing是線程安全的嗎? 為什么?

你可以很肯定的給出回答,Swing不是線程安全的,但是你應該解釋這么回答的原因即便面試官沒有問你為什么。當我們說swing不是線程安全的常 常提到它的組件,這些組件不能在多線程中進行修改,所有對GUI組件的更新都要在AWT線程中完成,而Swing提供了同步和異步兩種回調方法來進行更新。

18.Java中invokeAndWait 和 invokeLater有什么區別?

這兩個方法是Swing API 提供給Java開發者用來從當前線程而不是事件派發線程更新GUI組件用的。InvokeAndWait()同步更新GUI組件,比如一個進度條,一旦進 度更新了,進度條也要做出相應改變。如果進度被多個線程跟蹤,那么就調用invokeAndWait()方法請求事件派發線程對組件進行相應更新。而 invokeLater()方法是異步調用更新組件的。

19.Swing API中那些方法是線程安全的?

這個問題又提到了swing和線程安全,雖然組件不是線程安全的但是有一些方法是可以被多線程安全調用的,比如repaint(), revalidate()。 JTextComponent的setText()方法和JTextArea的insert() 和 append() 方法也是線程安全的。

20.如何在Java中創建Immutable對象?

這個問題看起來和多線程沒什么關系, 但不變性有助于簡化已經很復雜的并發程序。Immutable對象可以在沒有同步的情況下共享,降低了對該對象進行并發訪問時的同步化開銷。可是Java 沒有@Immutable這個注解符,要創建不可變類,要實現下面幾個步驟:通過構造方法初始化所有成員、對變量不要提供setter方法、將所有的成員 聲明為私有的,這樣就不允許直接訪問這些成員、在getter方法中,不要直接返回對象本身,而是克隆對象,并返回對象的拷貝。

以上就是動力節點小編介紹的"Java多線程面試題",希望對大家有幫助,如有疑問,請在線咨詢,有專業老師隨時為您服務。

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

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 在线中文字幕网 | 欧美成人性videos | 亚洲欧美中文字幕 | 成人亚洲网 | 日韩免费高清一级毛片在线 | 日日爽日日操 | 亚洲精品高清在线 | 91精品国产免费久久国语麻豆 | 国内外一级毛片 | 久久久视频在线 | 欧美日韩性大片 | 看全色黄大色大片免费视频 | 国内精品视频一区二区三区八戒 | 国产96福利视频在线观看 | 国产真实伦视频在线观看 | 国产成人久久一区二区三区 | 一级毛片www| 久久综合九色综合97欧美 | www.五月天婷婷 | 最新国产精品亚洲 | 日韩精品亚洲一级在线观看 | 黄色网址亚洲 | 亚洲国产大片 | 成人四虎影院 | 免费成人高清视频 | 97se亚洲综合 | 国语毛片 | 国产理论最新国产精品视频 | 777奇米影视网 | 26uuu欧美日韩国产 | 性欧美高清come | 亚洲精品色综合久久 | 国产福利一区二区在线精品 | 热久久最新地址 | 免费观看男女羞羞的视频网站 | 久久精品男人的天堂 | 天天透天天操 | 日本工番囗番全彩本子大全 | 在线亚洲播放 | 97天天干 | 亚洲国产综合久久精品 |