21-1-11
如何實現數組和 List 之間的轉換?
- List轉換成爲數組:調用ArrayList的toArray方法。
- 數組轉換成爲List:調用Arrays的asList方法。
Array 和 ArrayList 有何區別?
- Array能夠容納基本類型和對象,而ArrayList只能容納對象。
- Array是指定大小的,而ArrayList大小是固定的。
- Array沒有提供ArrayList那麼多功能,好比addAll、removeAll和iterator等。
並行和併發有什麼區別?
- 並行是指兩個或者多個事件在同一時刻發生;而併發是指兩個或多個事件在同一時間間隔發生。
- 並行是在不一樣實體上的多個事件,併發是在同一實體上的多個事件。
- 在一臺處理器上「同時」處理多個任務,在多臺處理器上同時處理多個任務。如hadoop分佈式集羣。
建立線程有哪幾種方式?
①. 繼承Thread類建立線程類數組
- 定義Thread類的子類,並重寫該類的run方法,該run方法的方法體就表明了線程要完成的任務。所以把run()方法稱爲執行體。
- 建立Thread子類的實例,即建立了線程對象。
- 調用線程對象的start()方法來啓動該線程。
②. 經過Runnable接口建立線程類併發
- 定義runnable接口的實現類,並重寫該接口的run()方法,該run()方法的方法體一樣是該線程的線程執行體。
- 建立 Runnable實現類的實例,並依此實例做爲Thread的target來建立Thread對象,該Thread對象纔是真正的線程對象。
- 調用線程對象的start()方法來啓動該線程。
③. 經過Callable和Future建立線程分佈式
- 建立Callable接口的實現類,並實現call()方法,該call()方法將做爲線程執行體,而且有返回值。
- 建立Callable實現類的實例,使用FutureTask類來包裝Callable對象,該FutureTask對象封裝了該Callable對象的call()方法的返回值。
- 使用FutureTask對象做爲Thread對象的target建立並啓動新線程。
- 調用FutureTask對象的get()方法來得到子線程執行結束後的返回值。
線程有哪些狀態?
線程一般都有五種狀態,建立、就緒、運行、阻塞和死亡。函數
- 建立狀態。在生成線程對象,並無調用該對象的start方法,這是線程處於建立狀態。
- 就緒狀態。當調用了線程對象的start方法以後,該線程就進入了就緒狀態,可是此時線程調度程序尚未把該線程設置爲當前線程,此時處於就緒狀態。在線程運行以後,從等待或者睡眠中回來以後,也會處於就緒狀態。
- 運行狀態。線程調度程序將處於就緒狀態的線程設置爲當前線程,此時線程就進入了運行狀態,開始運行run函數當中的代碼。
- 阻塞狀態。線程正在運行的時候,被暫停,一般是爲了等待某個時間的發生(好比說某項資源就緒)以後再繼續運行。sleep,suspend,wait等方法均可以致使線程阻塞。
- 死亡狀態。若是一個線程的run方法執行結束或者調用stop方法後,該線程就會死亡。對於已經死亡的線程,沒法再使用start方法令其進入就緒