1、八大核心面試問題總結
- 有多少種實現線程的方法?思路有5點
- 實現Runnable接口和繼承Thread類哪種方式更好?
- 一個線程兩次調用start()方法會出現什麼情況?爲什麼?
- 既然start()方法會調用run()方法,爲什麼我們選擇調用start()方法,而不是直接調用run()方法呢?
- 如何停止線程
- 如何處理不可中斷的阻塞
- 線程有哪幾種狀態?生命週期是什麼?
- 用程序實現兩個線程交替打印0~100的奇偶數
- 手寫生產者消費者設計模式
- 爲什麼wait()需要在同步代碼塊內使用,而sleep()不需要
- 爲什麼線程通信的方法wait(),notify()和notifyAll()被定義在Object類裏?而sleep定義在Thread類裏?
- wait方法是屬於Object對象的,那調用Thread.wait會怎麼樣?
- 如何選擇用notify還是notifyAll?
- notifyAll之後所有的線程都會再次搶奪鎖,如果某線程搶奪失敗怎麼辦?
- 用suspend()和resume()來阻塞線程可以嗎?爲什麼?
- wait/notify、sleep異同(方法屬於哪個對象?線程狀態怎麼切換?)
- 在join期間,線程處於哪種線程狀態?
- 守護線程和普通線程的區別
- 我們是否需要把線程設置爲守護線程?
- run方法是否可以拋出異常?如果拋出異常,線程的狀態會怎麼樣?
- 線程中如何處理某個未處理異常?
- 什麼是多線程的上下文切換?