LinkedBlockingQueue配合线程池
时间: 2023-11-23 14:56:27 浏览: 81
LinkedBlockingQueue是Java中的一个阻塞队列,它可以用于实现生产者-消费者模型。线程池是Java中的一个线程管理工具,它可以用于管理线程的创建、销毁和复用。LinkedBlockingQueue可以和线程池一起使用,实现线程池中任务的排队和调度。
具体来说,LinkedBlockingQueue可以作为ThreadPoolExecutor的任务队列,用于存储等待执行的任务。当线程池中的线程数达到核心线程数时,新的任务会被放入LinkedBlockingQueue中等待执行。当线程池中的线程数达到最大线程数时,新的任务会被拒绝执行。
下面是一个使用LinkedBlockingQueue配合线程池的示例代码:
```java
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.LinkedBlockingQueue;
public class ThreadPoolDemo {
public static void main(String[] args) {
// 创建一个固定大小的线程池
ExecutorService executor = Executors.newFixedThreadPool(5);
// 创建一个无界的阻塞队列
LinkedBlockingQueue<Runnable> queue = new LinkedBlockingQueue<>();
// 设置线程池的任务队列
((ThreadPoolExecutor) executor).setQueue(queue);
// 提交任务
for (int i = 0; i < 10; i++) {
executor.submit(new Task(i));
}
// 关闭线程池
executor.shutdown();
}
static class Task implements Runnable {
private int taskId;
public Task(int taskId) {
this.taskId = taskId;
}
@Override
public void run() {
System.out.println("Task " + taskId + " is running.");
}
}
}
```
在这个示例中,我们首先创建了一个固定大小为5的线程池,然后创建了一个无界的阻塞队列LinkedBlockingQueue,并将其设置为线程池的任务队列。接着,我们提交了10个任务给线程池执行。由于线程池中的线程数是5,所以前5个任务会被立即执行,而后面的5个任务会被放入阻塞队列中等待执行。最后,我们关闭了线程池。
阅读全文