详细步骤
例行说明
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));
- 效果分析
- 只要线程池里有空闲的线程,新任务加进来,直接放到空闲的线程上跑,用完的就在那里等下一个任务
- 如果无可回收线程时,则会根据需要创建新线程运行
- 所以使用线程池的好处就是——灵活创建回收线程