詳細步驟
例行說明
Thread creation and destruction is very expensive
-
由此引入線程池科學管理線程,又根據音頻播放的併發性以及數量的不確定性,選擇緩存線程池
CacheThreadPool
管理音頻播放 -
其特點是:線程數沒有限制,線程重用率高,並且有一個超時回收機制,當空閒的線程超過 1 分鐘就會進行回收
代碼分析
總共就兩行代碼,堪稱所有版本之中最簡單的一個,沒有之一
KeyboardPiano
創建一個緩存線程池
ExecutorService cachedThreadPool = Executors.newCachedThreadPool();
MyButton
原先直接new MusicPlayer().start()
就開始跑,現在換成線程池管理
kp.cachedThreadPool.execute(new MusicPlayer(getType(), wavPath));
- 效果分析
- 只要線程池裏有空閒的線程,新任務加進來,直接放到空閒的線程上跑,用完的就在那裏等下一個任務
- 如果無可回收線程時,則會根據需要創建新線程運行
- 所以使用線程池的好處就是——靈活創建回收線程