Executors.newFixedThreadPool默认的大小
时间: 2023-10-28 09:41:45 浏览: 94
Executors.newFixedThreadPool默认的大小是 CPU 核心数的两倍。具体来说,它使用的是Runtime.getRuntime().availableProcessors() * 2作为线程池的大小。这样可以充分利用 CPU 资源,并避免创建过多的线程导致系统资源的浪费。当然,这个默认值也可以通过指定ThreadPoolExecutor构造函数中的参数来修改。
相关问题
Executors.newFixedThreadPool默认的队列大小是多少
Executors.newFixedThreadPool方法会创建一个固定大小的线程池,其中线程数量是指定的,队列大小是默认的Integer.MAX_VALUE。也就是说,当所有线程都在忙碌时,新提交的任务将会被放入队列中等待执行。如果队列的大小是Integer.MAX_VALUE,那么队列理论上可以无限大,但实际上会受限于内存大小等因素。
Executors.newFixedThreadPool()注意事项
`Executors.newFixedThreadPool()`是Java并发包提供的工具类,用于创建固定大小的工作线程池。以下是使用这个方法创建线程池时需要注意的几点:
1. **线程数设置**:你需要预先确定线程池的大小,这个大小取决于你的应用需求,过多可能导致资源浪费,过少可能导致任务处理速度慢。
2. **拒绝策略**:线程池满时,会有一个默认的拒绝策略,如果新提交的任务无法立即执行(工作线程已全部忙),那么它会被丢弃(AbortPolicy)。如果你需要自定义策略(如循环尝试、排队等待等),可以传递一个`RejectedExecutionHandler`实例给构造函数。
3. **守护线程**:默认情况下,新FixedThreadPool创建的线程不是守护线程,这意味着它们会在应用程序关闭前继续运行。如果你希望这些线程在主应用退出时自动结束,需将其设置为守护线程(通过`setDaemon(true)`)。
4. **生命周期管理**:`newFixedThreadPool`返回的是一个`ExecutorService`,你应该在不再需要时调用`shutdown`或`shutdownNow`来关闭它,防止内存泄漏。
5. **同步与并发**:由于线程池的存在,你需要确保对共享数据的访问是线程安全的,特别是在任务队列和结果处理上。
阅读全文