用Java多线程写一个文件
时间: 2023-07-18 14:19:17 浏览: 106
在Java中,我们可以使用`java.util.concurrent.ExecutorService`和`java.util.concurrent.Future`来实现多线程写文件的功能。以下是一个简单的示例代码:
```java
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.*;
public class MultiThreadWriteFile {
public static void main(String[] args) throws Exception {
String fileName = "example.txt";
List<String> contents = new ArrayList<>();
contents.add("content1");
contents.add("content2");
contents.add("content3");
contents.add("content4");
ExecutorService executor = Executors.newFixedThreadPool(4);
List<Future<Void>> futures = new ArrayList<>();
for (String content : contents) {
Future<Void> future = executor.submit(() -> {
writeToFile(fileName, content);
return null;
});
futures.add(future);
}
for (Future<Void> future : futures) {
future.get();
}
executor.shutdown();
}
private static void writeToFile(String fileName, String content) {
try (FileWriter writer = new FileWriter(fileName, true)) {
writer.write(content + "\n");
} catch (IOException e) {
e.printStackTrace();
}
}
}
```
在上述代码中,我们首先定义了文件名和要写入的内容列表,并创建了一个固定大小为4的线程池。然后,我们使用`executor.submit`方法将每个写入操作封装成一个`Callable`对象并提交给线程池进行执行,得到一个`Future`对象。将这些`Future`对象存储在一个列表中,以便我们在所有写入操作完成后等待它们的完成。
在`writeToFile`方法中,我们使用`FileWriter`来打开并写入文件。需要注意的是,我们在`FileWriter`的构造函数中传入了`true`参数,以便将新的内容追加到文件末尾而不是覆盖文件。
最后,我们调用`executor.shutdown`方法关闭线程池。
阅读全文