java多线程请求进队列排队处理代码
时间: 2024-11-06 16:14:35 浏览: 6
在Java中,我们可以使用`java.util.concurrent`包下的`BlockingQueue`类来创建一个队列,用于线程间的消息传递和任务调度。例如,你可以使用`ArrayBlockingQueue`作为请求的入口,同时有一个或多个工作线程从队列中取出任务进行处理。这里是一个简单的示例:
```java
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class QueueProcessor {
private final int queueSize = 10; // 队列大小
private final ArrayBlockingQueue<Runnable> taskQueue = new ArrayBlockingQueue<>(queueSize);
private ExecutorService executor = Executors.newFixedThreadPool(5); // 创建固定大小的工作线程池
public void addRequest(Runnable request) {
taskQueue.offer(request); // 将请求加入队列
}
public void startProcessing() {
while (true) { // 持续从队列中取出任务处理
Runnable task = taskQueue.poll(); // 如果队列中有任务,则取出并执行
if (task != null) {
executor.execute(task); // 提交到工作线程池执行
} else {
// 队列空闲,可以考虑休息或者检查其他条件
try {
Thread.sleep(100); // 等待一段时间
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public void stop() {
executor.shutdown(); // 关闭线程池
}
}
// 使用示例
public static void main(String[] args) {
QueueProcessor processor = new QueueProcessor();
for (int i = 0; i < 20; i++) {
Runnable requestTask = () -> System.out.println("Processing request " + i);
processor.addRequest(requestTask);
}
processor.startProcessing();
}
```
在这个例子中,`addRequest`方法将任务添加到队列,`startProcessing`方法启动工作线程循环处理队列中的任务。当所有任务完成,或者队列满了(`queueSize`),线程会进入等待状态。
阅读全文