java 用CompletableFuture实现一个线程读取文件放入队列中 一个线程同时输出队列中的文件
时间: 2024-04-09 21:33:13 浏览: 82
好的,我可以帮你实现这个功能。下面是使用`CompletableFuture`来实现一个线程读取文件并将其放入队列中,然后另一个线程输出队列中的文件的示例代码:
```java
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ConcurrentLinkedQueue;
public class FileProcessor {
private ConcurrentLinkedQueue<String> fileQueue = new ConcurrentLinkedQueue<>();
public void processFile(String filePath) {
CompletableFuture.runAsync(() -> {
try (BufferedReader reader = new BufferedReader(new FileReader(new File(filePath)))) {
String line;
while ((line = reader.readLine()) != null) {
fileQueue.offer(line);
}
} catch (Exception e) {
e.printStackTrace();
}
});
}
public void printFileQueue() {
CompletableFuture.runAsync(() -> {
while (!fileQueue.isEmpty()) {
System.out.println(fileQueue.poll());
}
});
}
public static void main(String[] args) {
FileProcessor fileProcessor = new FileProcessor();
// 读取文件并放入队列中
fileProcessor.processFile("path/to/your/file.txt");
// 输出队列中的文件
fileProcessor.printFileQueue();
}
}
```
以上代码使用了`CompletableFuture.runAsync()`方法来异步执行文件的读取和打印操作。`ConcurrentLinkedQueue`用于存储文件内容,以便在不同线程之间进行安全的数据共享。
请确保将`"path/to/your/file.txt"`替换为实际的文件路径。你也可以根据实际需求进行其他的逻辑处理和优化。
阅读全文