Android基礎知識總結
一:多執行緒
1.1:多執行緒的安全問題
- 多個執行緒共享同一資料,當某一執行緒執行多條語句時,其他執行緒也執行進來,導致資料在某一語句上被多次修改,執行到下一語句時,導致錯誤資料的產生。
1.2:執行緒池的理解 1.2.1:降低資源消耗。通過重複利用已建立的執行緒降低執行緒建立和銷燬造成的消耗。 1.2.2:提高響應速度。當任務到達時,任務可以不需要等到執行緒建立就能立即執行。 1.2.3:提高執行緒的可管理性。執行緒是稀缺資源,如果無限制的建立,不僅會消耗系統資源,還會降低系統的穩定 性,使用執行緒池可以進行統一的分配,調優和監控 1.2.4:執行緒池剛建立時,裡面沒有一個執行緒。任務佇列是作為引數傳進來的。不過,就算佇列裡面有任務,執行緒池也 不會馬上執行它們。 1.3、當呼叫 execute() 方法新增一個任務時,執行緒池會做如下判斷: a. 如果正在執行的執行緒數量小於 corePoolSize,那麼馬上建立執行緒執行這個任務; b. 如果正在執行的執行緒數量大於或等於 corePoolSize,那麼將這個任務放入佇列。 c. 如果這時候佇列滿了,而且正在執行的執行緒數量小於 maximumPoolSize,那麼還是要建立執行緒執行這 個任務; d. 如果佇列滿了,而且正在執行的執行緒數量大於或等於 maximumPoolSize,那麼執行緒池會丟擲異常,告 訴呼叫者“我不能再接受任務了”。 3、當一個執行緒完成任務時,它會從佇列中取下一個任務來執行。 4、當一個執行緒無事可做,超過一定的時間(keepAliveTime)時,執行緒池會判斷,如果當前執行的執行緒數大於 corePoolSize,那麼這個執行緒就被停掉。所以執行緒池的所有任務完成後,它最終會收縮到 corePoolSize 的大小。