您好,登錄后才能下訂單哦!
多線程并發編程是Java編程中重要的一塊內容,也是面試重點覆蓋區域。所以,學好多線程并發編程對Java程序員來來說極其重要的。文末領取答案
下面小編整理了65道最常見的Java多線程面試題及答案,供你學習或者面試參考。
一、Thread類常用方法:
Thread MyThread = new Thread(mt,“線程名”);
//sleep()使該線程進入阻塞狀態,本身不會釋放鎖
MyThread .sleep(millis);//毫秒數
MyThread .yield()//放棄cpu使用權利,使該線程進入就緒狀態
MyThread.getState();//獲得線程狀態
MyThread.currentThread();//獲得正在執行的線程對象MyThread
MyThread.join();//等待該線程結束,調用該線程(MyThread)的該方法(.join())的線程(比如主線程)才能繼續執行
MyThread.setDaemon(on);//設置該線程為守護線程
MyThread.isDaemon();//判斷是否守護線程
二、volatile和synchronized的區別
volatile本質是在告訴jvm當前變量在寄存器(工作內存)中的值是不確定的,需要從主存中讀取; synchronized則是鎖定當前變量,只有當前線程可以訪問該變量,其他線程被阻塞住。
volatile僅能使用在變量級別;synchronized則可以使用在變量、方法、和類級別的
volatile不會造成線程的阻塞;synchronized可能會造成線程的阻塞。
三、怎么喚醒一個阻塞的線程
如果線程是因為調用了wait()、sleep()或者join()方法而導致的阻塞,可以中斷線程,并且通過拋出InterruptedException來喚醒它;如果線程遇到了IO阻塞,無能為力,因為IO是操作系統實現的,Java代碼并沒有辦法直接接觸到操作系統。
四、wait()、sleep()方法和notify()/notifyAll()方法在放棄對象監視器時有什么區別
sleep睡眠后不出讓系統資源,wait讓出系統資源其他線程可以占用CPU
sleep()方法不會釋放鎖
wait()方法和notify()/notifyAll()方法在放棄對象監視器的時候的區別在于:wait()方法立即釋放對象監視器,notify()/notifyAll()方法則會等待線程剩余代碼執行完畢才會放棄對象監視器。
五、start()方法和run()方法的區別
只有調用了start()方法,才會表現出多線程的特性,不同線程的run()方法里面的代碼交替執行。如果只是調用run()方法,那么代碼還是同步執行的,必須等待一個線程的run()方法里面的代碼全部執行完畢之后,另外一個線程才可以執行其run()方法里面的代碼。
下面的面試題答案我就不一一弄出來了,文末免費領取答案
多線程有什么用?
線程和進程的區別是什么?
Java實現線程有哪幾種方式?
啟動線程方法start()和run()有什么區別?
怎么終止一個線程?如何優雅地終止線程?
一個線程的生命周期有哪幾種狀態?它們之間如何流轉的?
線程中的wait()和sleep()方法有什么區別?
多線程同步有哪幾種方法?
什么是死鎖?如何避免死鎖?
多線程之間如何進行通信?
線程怎樣拿到返回結果?
violatile關鍵字的作用?
新建T1、T2、T3三個線程,如何保證它們按順序執行?
怎么控制同一時間只有3個線程運行?
為什么要使用線程池?
常用的幾種線程池并講講其中的工作原理。
線程池啟動線程submit()和execute()方法有什么不同?
CyclicBarrier和CountDownLatch的區別?
什么是活鎖、饑餓、無鎖、死鎖?
什么是原子性、可見性、有序性?
什么是守護線程?有什么用?
怎么中斷一個線程?如何保證中斷業務不影響?
一個線程運行時發生異常會怎樣?
什么是重入鎖?
Synchronized有哪幾種用法?
Fork/Join框架是干什么的?
線程數過多會造成什么異常?
說說線程安全的和不安全的集合。
什么是CAS算法?在多線程中有哪些應用。
怎么檢測一個線程是否擁有鎖?
Jdk中排查多線程問題用什么命令?
線程同步需要注意什么?
線程wait()方法使用有什么前提?
Fork/Join框架使用有哪些要注意的地方?
線程之間如何傳遞數據?
保證"可見性"有哪幾種方式?
說幾個常用的Lock接口實現鎖。
ThreadLocal是什么?有什么應用場景?
ReadWriteLock有什么用?
FutureTask是什么?
怎么喚醒一個阻塞的線程?
不可變對象對多線程有什么幫助?
多線程上下文切換是什么意思?
Java中用到了什么線程調度算法?
Thread.sleep(0)的作用是什么?
Java內存模型是什么,哪些區域是線程共享的,哪些是不共享的
什么是樂觀鎖和悲觀鎖?
Hashtable的size()方法為什么要做同步?
同步方法和同步塊,哪種更好?
什么是自旋鎖?
Runnable和Thread用哪個好?
Java中notify和notifyAll有什么區別?
為什么wait/notify/notifyAll這些方法不在thread類里面?
為什么wait和notify方法要在同步塊中調用?
為什么你應該在循環中檢查等待條件?
Java中堆和棧有什么不同?
你如何在Java中獲取線程堆棧?
如何創建線程安全的單例模式?
什么是阻塞式方法?
提交任務時線程池隊列已滿會時發會生什么?
總結:
今天就分享到這里,備戰金九銀十,高薪在等你,資料都可以免費提供給大家,我都按專題分類做成了pdf,還有很多視頻資料,花了我老多老多的時間了,所以老鐵們給我點個贊把(圖片只是一部分)
領取方式關注我的架構師交流××× ×××就可以免費領取了哦
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。