无界队列怎么设置线程池
时间: 2023-07-08 10:45:44 浏览: 80
使用无界队列的线程池可以通过 Executors 工具类提供的 newCachedThreadPool() 方法来创建。该方法会创建一个线程数不限、工作队列使用 SynchronousQueue(一种无界队列)的线程池。示例如下:
```java
ExecutorService executor = Executors.newCachedThreadPool();
```
如果需要自定义线程池,可以使用 ThreadPoolExecutor 类来创建。设置无界队列时,需要使用 LinkedBlockingQueue 类作为任务队列,示例如下:
```java
ExecutorService executor = new ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>());
```
其中,corePoolSize 为核心线程数,maximumPoolSize 为最大线程数,keepAliveTime 为线程空闲时间,TimeUnit.SECONDS 表示时间单位为秒。由于使用了无界队列,因此队列的容量不需要设置,可以直接使用 LinkedBlockingQueue() 构造方法创建队列。
需要注意的是,使用无界队列的线程池可以无限制地接受新的任务,因此需要根据任务的特点和系统负载情况来选择合适的队列类型。如果任务处理能力较弱,可以使用无界队列,以便能够保持任务的响应能力;如果任务处理能力较强,可以使用有界队列,避免任务过多导致系统资源的浪费。