java線程練習題及答案_第1頁
java線程練習題及答案_第2頁
java線程練習題及答案_第3頁
java線程練習題及答案_第4頁
java線程練習題及答案_第5頁
已閱讀5頁,還剩11頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、精品文檔 java線程練習題及答案 一 選擇題 1. 下列說法中錯誤的一項是 A. 線程就是程序 B.線程是一個程序的單個執行流 B. 多線程是指一個程序的多個執行流 D.多線程用于實現并發 2. 下列哪個一個操作不能使線程從等待阻塞狀態進入對象阻塞狀態 A. B. C. D. 等待陰塞狀態下的線程被notify喚 等待阻塞狀態下的純種被interrput中斷 等待時間到 等待阻塞狀態下的線程調用wait方法 C.yieldD.start. 下列哪個方法可以使線程從運行狀態進入其他阻塞狀態 A. sleepB.wait 4. 下列說法中錯誤的一項是 A. B. 一個線程是一個Thread類的實

2、例 線程從傳遞給純種的Runnable實例run方法開始執行 C. 線程操作的數據來自Runnable實例 D. 新建的線程調用start方法就能立即進入運行狀態 5. 下列關于Thread類提供的線程控制方法的說法中,錯誤的一項是 A. B. 在線程A中執行線程B的join方法,則線程A等待直到B執行完成 線程A通過調用interrupt方法來中斷其阻塞狀態 C. 若線程A調用方法isAlive返回值為true,則說明A正在執行中 D. currentThread方法返回當前線程的引用 6. 下列說法中,錯誤的一項是 A. 對象鎖在synchronized語句執行完之后由持有它的線程返還 B

3、. C. 對象鎖在synchronized語句中出現異常時由持有它的線程返還 當持有鎖的線程調用了該對象的wait方法時,線程將釋放其持有的鎖 D. 當持有鎖的線程調用了該對象的構造方法時,線程將釋放其持有的鎖 7. 下面的哪一個關鍵字通常用來對對象的加鎖,從而使得對對象的訪問是排他的 A A. sirializeB transientC synchronized 二填空題 1. 在操作系統中,被稱做輕型的進程是線程 D static. 多線程程序設計的含義是可以將一個程序任務分成幾個并行的 . 在Java程序中,run方法的實現有兩種方式: 實現Runnable接口 和 繼 但是承Threa

4、d類 .線程之間的相對執行順序是 不確定 的.Java中的對象鎖是一種獨占的鎖.程序中可能出現一種情況:多個線種互相等待對方持有的鎖,而在得到對方的鎖 MIN_PRIORITY 和之前都不會釋放自己的鎖,這就是 死鎖8.線程的優先級是在Thread類的常數 之間的一個值 9.處于新建狀態的線程可以使用的控制方法是和。 10.一個進程可以包含多個 三簡答題 1.說明幾個概念: 對象鎖、sleep、wait、notify、notifyAll 對象鎖:每個對象都有對象鎖,當某個線程進入用synchronized定義方法時,就獲得了當前類對象的鎖,其他線程就不能再獲得該鎖,直到線程釋放該鎖。一個類對象

5、有一個對象鎖,多個同步方法公用一個對象鎖。 sleep:是當前線程處于休眠狀態,將對cpu的控制權交給其他線程,但不釋放當前對象的鎖,其他線程可以獲得cpu,但不能進入當前線程控制的對象鎖。 wait:與sleep的區別是,它會釋放對象鎖,其他線程可以進入該同步塊。 notify:進入當前同步塊的線程調用wait方法變成休眠狀態的線程,notify將該線程變成等待狀態。 notifyAll:進入當前同步塊的線程調用wait方法變成休眠狀態,notifyAll使所有休眠線程變成等待狀態。 一個類中有多個同步方法,進入任意一個同步塊都將獲得該對象鎖,由于wait方法使進入同步塊的線程休眠,noti

6、fy只能喚醒所有被休眠線程中的一個,notifyAll可以喚醒所有休眠線程。通常線程的通信通過wait,notifyAll和wait條件來實現。 2. java 中有幾種方法可以實現一個線程?用什么關鍵字修飾同步方法 ? S 有兩種實現方法,分別是繼承 Thread類與實現Runnable接口 用synchronized關鍵字修飾同步方法 3. sleep 和 wait 有什么區別 ? 答: sleep是線程類的方法,導致此線程暫停執行指定時間,給執行機會給其他線程,但是監控狀態依然保持,到時后會自動恢復。調用sleep不會釋放對象鎖。wait是Object類的方法,對此對象調用wait方法導

7、致本線程放棄對象鎖,進入等待此對象的等待鎖定池,只有針對此對象發出notify方法后本線程才進入對象鎖定池準備獲得對象鎖進入運行狀態。 4. 同步和異步有何異同,在什么情況下分別使用他們?舉例說明。 答: 如果數據將在線程間共享。例如正在寫的數據以后可能被另一個線程讀到,或者正在讀的數據可能已經被另一個線程寫過了,那么這些數據就是共享數據,必須進行同步存取。 當應用程序在對象上調用了一個需要花費很長時間來執行的方法,并且不希望讓程序等待方法的返回時,就應該使用異步編程,在很多情況下采用異步途徑往往更有效率。 5.啟動一個線程是用 run 還是 start? 答: 啟動一個線程是調用start方

8、法,使線程所代表的虛擬處理機處于可運行狀態,這意味著它可以由JVM調度并執行。這并不意味著線程就會立即運行。run方法可以產生必須退出的標志來停止一個線程。 6.多線程有幾種實現方法 , 都是什么 ? 同步有幾種實現方法 , 都是什么 ? 答: 多線程有兩種實現方法,分別是繼承 Thread類與實現Runnable接口 同步的實現方面有兩種,分別是synchronized,wait與notify 7. 線程的基本狀態以及狀態之間的關系 Java中的線程有四種狀態分別是:運行、就緒、掛起、結束 Java 線程面試問題 在任何Java面試當中多線程和并發方面的問題都是必不可少的一部分。如果你想獲得

9、任何股票投資銀行的前臺資訊職位,那么你應該準備很多關于多線程的問題。在投資銀行業務中多線程和并發是一個非常受歡迎的話題,特別是電子交易發展方面相關的。他們會問面試者很多令人混淆的Java線程問題。面試官只是想確信面試者有足夠的Java線程與并發方面的知識,因為候選人中有很多只浮于表面。用于直接面向市場交易的高容量和低延時的電子交易系統在本質上是并發的。下面這些是我在不同時間不同地點喜歡問的Java線程問題。我沒有提供答案,但只要可能我會給你線索,有些時候這些線索足夠回答問題。現在引用Java5并發包關于并發工具和并發集合的問題正在增多。那些問題中ThreadLocal、Blocking Que

10、ue、Counting Semaphore和ConcurrentHashMap比較流行。 15個Java多線程面試題及回答 1)現在有T1、T2、T3三個線程,你怎樣保證T2在T1執行完后執行,T3在T2執行完后執行? 這個線程問題通常會在第一輪或電話面試階段被問到,目的是檢測你對”join”方法是否熟悉。這個多線程問題比較簡單,可以用join方法實現。 2)在Java中Lock接口比synchronized塊的優勢是什么?你需要實現一個高效的緩存,它允許多個用戶讀,但只允許一個用戶寫,以此來保持它的完整性,你會怎樣去實現它? lock接口在多線程和并發編程中最大的優勢是它們為讀和寫分別提供了

11、鎖,它能滿足你寫像ConcurrentHashMap這樣的高性能數據結構和有條件的阻塞。Java線程面試的問題越來越會根據面試者的回答來提問。我強烈建議在你去參加多線程的面試之前認真讀一下Locks,因為當前其大量用于構建電子交易終統的客戶端緩存和交易連接空間。 3)在java中wait和sleep方法的不同? 通常會在電話面試中經常被問到的Java線程面試問題。最大的不同是在等待時wait會釋放鎖,而sleep一直持有鎖。Wait通常被用于線程間交互,sleep通常被用于暫停執行。 4)用Java實現阻塞隊列。 這是一個相對艱難的多線程面試問題,它能達到很多的目的。第一,它可以檢測侯選者是否

12、能實際的用Java線程寫程序;第二,可以檢測侯選者對并發場景的理解,并且你可以根據這個問很多問題。如果他用wait和notify方法來實現阻塞隊列,你可以要求他用最新的Java中的并發類來再寫一次。 5)用Java寫代碼來解決生產者消費者問題。 與上面的問題很類似,但這個問題更經典,有些時候面試都會問下面的問題。在Java中怎么解決生產者消費者問題,當然有很多解決方法,我已經分享了一種用阻塞隊列實現的方法。有些時候他們甚至會問怎么實現哲學家進餐問題。 6)用Java編程一個會導致死鎖的程序,你將怎么解決? 這是我最喜歡的Java線程面試問題,因為即使死鎖問題在寫多線程并發程序時非常普遍,但是很

13、多侯選者并不能寫deadlock free code,他們很掙扎。只要告訴他們,你有N個資源和N個線程,并且你需要所有的資源來完成一個操作。為了簡單這里的n可以替換為2,越大的數據會使問題看起來更復雜。通過避免Java中的死鎖來得到關于死鎖的更多信息。 7) 什么是原子操作,Java中的原子操作是什么? 非常簡單的java線程面試問題,接下來的問題是你需要同步一個原子操作。 8) Java中的volatile關鍵是什么作用?怎樣使用它?在Java中它跟synchronized方法有什么不同? 自從Java和Java內存模型改變以后,基于volatile關鍵字的線程問題越來越流行。應該準備好回答

14、關于volatile變量怎樣在并發環境中確保可見性、順序性和一致性。 9) 什么是競爭條件?你怎樣發現和解決競爭? 這是一道出現在多線程面試的高級階段的問題。大多數的面試官會問最近你遇到的競爭條件,以及你是怎么解決的。有些時間他們會寫簡單的代碼,然后讓你檢測出代碼的競爭條件。可以參考我之前發布的關于Java競爭條件的文章。在我看來這是最好的java線程面試問題之一,它可以確切的檢測候選者解決競爭條件的經驗,or writing code which is free of data race or any other race condition。關于這方面最好的書是Concurrency pr

15、actices in Java。 10) 你將如何使用thread dump?你將如何分析Thread dump? 在UNIX中你可以使用kill -3,然后thread dump將會打印日志,在windows中你可以使用”CTRL+Break”。非常簡單和專業的線程面試問題,但是如果他問你怎樣分析它,就會很棘手。 11) 為什么我們調用start方法時會執行run方法,為什么我們不能直接調用run方法? 這是另一個非常經典的java多線程面試問題。這也是我剛開始寫線程程序時候的困惑。現在這個問題通常在電話面試或者是在初中級Java面試的第一輪被問到。這個問題的回答應該是這樣的,當你調用sta

16、rt方法時你將創建新的線程,并且執行在run方法里的代碼。但是如果你直接調用run方法,它不會創建新的線程也不會執行調用線程的代碼。閱讀我之前寫的start與run方法的區別這篇文章來獲得更多信息。 12) Java中你怎樣喚醒一個阻塞的線程? 這是個關于線程和阻塞的棘手的問題,它有很多解決方法。如果線程遇到了IO阻塞,我并且不認為有一種方法可以中止線程。如果線程因為調用wait、sleep、或者join方法而導致的阻塞,你可以中斷線程,并且通過拋出 InterruptedException來喚醒它。我之前寫的How to deal with blocking methods in java有

17、很多關于處理線程阻塞的信息。 13)在Java中CycliBarriar和CountdownLatch有什么區別? 這個線程問題主要用來檢測你是否熟悉JDK5中的并發包。這兩個的區別是CyclicBarrier可以重復使用已經通過的障礙,而CountdownLatch不能重復使用。 14) 什么是不可變對象,它對寫并發應用有什么幫助? 另一個多線程經典面試問題,并不直接跟線程有關,但間接幫助很多。這個java面試問題可以變的非常棘手,如果他要求你寫一個不可變對象,或者問你為什么String是不可變的。 15) 你在多線程環境中遇到的常見的問題是什么?你是怎么解決它的? 多線程和并發程序中常遇到

18、的有Memory-interface、競爭條件、死鎖、活鎖和饑餓。問題是沒有止境的,如果你弄錯了,將很難發現和調試。這是大多數基于面試的,而不是基于實際應用的Java線程問題。 補充的其它幾個問題: 1) 在java中綠色線程和本地線程區別? 2) 線程與進程的區別? 3) 什么是多線程中的上下文切換? 4)死鎖與活鎖的區別,死鎖與饑餓的區別? 5) Java中用到的線程調度算法是什么? 6) 在Java中什么是線程調度? 7) 在線程中你怎么處理不可捕捉異常? 8) 什么是線程組,為什么在Java中不推薦使用? 9) 為什么使用Executor框架比使用應用創建和管理線程好? 10) 在Ja

19、va中Executor和Executors的區別? 11) 如何在Windows和Linux上查找哪個線程使用的CPU時間最長? Java 多線程編程練習題 選擇題 1編寫線程類,要繼承的父類是: A:Object B:Runnable C:Serializable D: Thread E: Exception 答 2編寫線程類,可以通過實現那個接口來實現? A:Runnable B:Throwable C:Serializable D:Comparable E:Cloneable 答: 3什么方法用于終止一個線程的運行? A:sleep B: join C: wait D: stop E:

20、notify 答: 4一個線程通過什么方法將處理器讓給另一個優先級別相同的線程? A:wait B:yield C:join D:sleep E:stop 答: 5如果要一個線程等待一段時間后再恢復執行此線程,需要調用什么方法? A:wait B:yield C:join D:sleep E:stop F:notify 答: 6. 什么方法使等待隊列中的第一個線程進入就緒狀態? A:wait B:yield C:join D:sleep E:stopF:notify 答: 7.Runnable接口定義了如下哪些方法? A: start B: stop C: resume D: run E: suspend 答: 8. 如下代碼創建一個新線程并啟動線程: Runnable target=new MyRunnable; Thread myThread=new Thread; 問:如下哪些類可以創建target對象,并能編譯正確? A: public class MyRunnable extends Runnable public void run B: public class MyRunnable extends Object public void run C: public class MyRunnable impl

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論