如果您不担心可调用/可运行任务的无限队列,则可以使用其中之一。正如布鲁诺建议,我也喜欢newFixedThreadPool到newCachedThreadPool这两者之间。但ThreadPoolExecutor的 规定相比,它更灵活的功能newFixedThreadPool或newCachedThreadPoolThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory,RejectedExecutionHandler handler)好处:您可以完全控制BlockingQueue的大小。与前两个选项不同,它不是无限的。由于系统中出现意外的动荡,未完成的可调用/可运行任务的大量堆积,我不会出现内存不足的错误。您可以实施自定义拒绝处理策略,也可以使用以下策略之一:默认情况下ThreadPoolExecutor.AbortPolicy,处理程序在拒绝时引发运行时RejectedExecutionException。在中ThreadPoolExecutor.CallerRunsPolicy,调用执行自己的线程运行任务。这提供了一种简单的反馈控制机制,将降低新任务提交的速度。在中ThreadPoolExecutor.DiscardPolicy,简单地删除了无法执行的任务。在中ThreadPoolExecutor.DiscardOldestPolicy,如果未关闭执行程序,则将丢弃工作队列开头的任务,然后重试执行(这可能再次失败,从而导致重复执行此操作)。您可以为以下用例实现自定义线程工厂:设置更具描述性的线程名称设置线程守护程序状态设置线程优先级