如果编写的是小程序,或者轻载的服务器,使用Executor.newCachedThreadPool通常是个不错的选择。
在大负载的服务器中,最好使用Executor.newFixedThreadPool,他为你提供了一个包含固定线程数目的线程池,活着为了最大限度的控制他,就直接使用ThreadPoolExecutor类
你不仅应该尽量不要编写自己的工作队列,而且还应该尽量不直接使用线程。现在关键抽象不再是Thread了,它以前既充当工作单位,又是执行机制,工作单位和工作单位实分不开的,现在关键抽象是工作单元,称作任务(task)。
任务有两种:Runnable及其近亲Callable(它与Runnable类似,但它会返回值),执行任务的通用机制是executor service
Timer只有一个线程来执行任务,如果timer唯一的线程跑出未被不活的异常,timer就会停止工作。而线程池executor支持多个线程,并且优雅的从跑出未受检异常的任务中恢复。