1 、ArrayList、Vector、LinkedList 之間的 區別?
ArrayList:底層數組,查詢快,增刪慢,線程不安全,效率高
Vector:底層數組,查詢快(因爲線程安全,其實查詢也不快),增刪慢,線程安全,效率低
LinkedList:底層雙重鏈表,查詢慢,增刪快,線程不安全,效率高。數組
三、列舉Collections工具類經常使用方法?
Collections.sort(list);按天然順序排序;
Collections.binarySearch(list,key); 二分查找;
Collections.reverse(list) 反轉;
Collections.shuffle(list) 隨機替換;安全
四、final、finally、finalize的區別?
final:修飾類,不能被繼承,修飾方法不能被重寫,修飾變量是常量
finally:是異常處理的一部分,用於釋放資源,通常來講代碼確定會執行,除非在執行finally以前,jvm退出了。
finalize:是Object的一個方法,用於垃圾回收。多線程
五、若是catch裏有return語句,請問finally還會執行嗎?若是會是在return前仍是return後?
會,在return前執行。不過finally的邏輯不會改變return的返回值。jvm
六、實現多線程有幾種方式?分別是什麼
有三種方式,繼承Thread類,實現runnable接口,實現callable接口工具
七、runnable與callable的區別?
Callable任務執行後能夠有返回值,而runnable不能返回值,call方法能夠拋出異常,而run方法只能try catch,運行callable任務能夠拿到一個Future對象,callable依賴線程池。性能
八、使用線程池的好處?
使用線程池提升系統的性能,減小建立,銷燬線程的資源開銷,由於代碼結束後,線程不會死亡,而是再回到線城池,等待下一個對象的調用。spa
十、sleep()和wait()的區別?
Sleep 會把執行機會給其餘線程,到時後自動恢復,不會釋放對象鎖,線程
wait 會釋放對象鎖,只有對象發出notify或notifyAll才準備獲取對象鎖。3d
11 、join()對象
join 單核cpu運行多線程時底層實現原理是多個線程間切換,因爲cpu的處理速度很快,看上去像多個線程同時運行。
那麼咱們如何實現讓線程T1,T2,T3,在T1執行完成後才執行T2,T2執行完成後才執行T3,
也就是線程的串行化,經過Thread類的join方法就能夠實現。
十一、run()和start()的區別?
Run僅僅是調線程執行的普通方法,start首先會啓動線程,由Jvm調用run方法。