java 多線程以及線程池
1.多線程可以使程序反應更快,交互性更強,執行效率最高。
2.創建一個線程: 要實現Runnable 接口,創建Thread類的對象,用start開始執行線程。
3.使用Thread中的yield()方法為其他線程臨時讓出CPU時間。
4.sleep()方法可以將線程設置為休眠狀態以確保其他線程執行。休眠時間為毫秒數·。
sleep()方法可能拋出一個InterruptedException.這是一個必撿異常。需要try-catch塊中。
5.java為每個線程都設置一個優先級。默認情況下,線程繼承他的線程的優先級。可以用setPriorty方法提高或者降低優先級。還可以用getPriorty方法獲取優先級。
優先級是1-10的數字。MIN_PRIORITY,NORM_PRIORITY,MAX_PRIORITY,分別代表1,5,10.
主線程的優先級是Thread.NORM_PRIORITY。
如果,線程的優先級相同,那麽將會用循環隊列給他們分配相同的CPU份額。被稱為 循環調度。
6.Thread中還包含 stop(),suspend(),resume()。方法,但是存在不安全因素。不提倡使用這些方法。
使用線程池的好處
1.通過重復利用已創建的線程, 減少在創建和銷毀線程上所花的時間以及系統資源的開銷。
2.提高響應速度。 當任務到達時, 任務可以不需要等到線程創建就可以立即行。
3.提高線程的可管理性。 使用線程池可以對線程進行統一的分配和監控。
4.如果不使用線程池, 有可能造成系統創建大量線程而導致消耗完系統內存。
線程池的註意事項
雖然線程池是構建多線程應用程序的強大機制, 但使用它並不是沒有風險的。
(1) 線程池的大小。 多線程應用並非線程越多越好, 需要根據系統運行的軟硬件環境以及應用本身的特點決定線程池的大小。 一般來說, 如果代碼結構合理的話, 線程數目與 CPU數量相適合即可。 如果線程運行時可能出現阻塞現象, 可相應增加池的大小; 如有必要可采用自適應算法來動態調整線程池的大小, 以提高 CPU 的有效利用率和系統的整體性能。
(2) 並發錯誤。 多線程應用要特別註意並發錯誤, 要從邏輯上保證程序的正確性, 註意避免死鎖現象的發生。
(3) 線程泄漏。 這是線程池應用中一個嚴重的問題, 當任務執行完畢而線程沒能返回池中就會發生線程泄漏現象。
java 多線程以及線程池