java 多執行緒的一種實現方式
阿新 • • 發佈:2018-11-09
private ThreadPoolExecutor threadPoolExecutor; /** * 獲取執行緒池 * @return */ private ThreadPoolExecutor getThreadPoolExecutor(){ if(threadPoolExecutor != null){ return threadPoolExecutor; } threadPoolExecutor = new ThreadPoolExecutor(5,20,10, TimeUnit.SECONDS,newArrayBlockingQueue<Runnable>(2)); return threadPoolExecutor; } public static void main(String str){ getThreadPoolExecutor().execute(()->{ //要執行的方法,呼叫 runMethod(); });
} public void runMethod(){ int a = 10; }
注意點:
1.執行緒的生命週期開銷非常高
2.消耗過多的CPU資源
如果可執行的執行緒數量多於可用處理器的數量,那麼有執行緒將會被閒置。大量空閒的執行緒會佔用許多記憶體,給垃圾回收器帶來壓力,而且大量的執行緒在競爭CPU資源時還將產生其他效能的開銷。
降低穩定性
3.JVM在可建立執行緒的數量上存在一個限制,這個限制值將隨著平臺的不同而不同,並且承受著多個因素制約,包括JVM的啟動引數、Thread建構函式中請求棧的大小,以及底層作業系統對執行緒的限制等。如果破壞了這些限制,那麼可能丟擲OutOfMemoryError異常。
4.執行緒過多時會報記憶體不足的情況,特別是訪問量很大時謹慎使用多執行緒,報錯的程式碼忘了 (如果任務過多處理不過來可以使用佇列來執行對應任務,減輕CPU壓力)