Java对象文件加线程
时间: 2024-03-05 16:50:22 浏览: 52
Java线程
下面是一个简单的示例代码,该代码演示了如何在多线程环境下对Java对象文件进行读写:
```java
import java.io.*;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class ObjectFileDemoWithThread {
private static final String FILE_NAME = "student.obj";
private static final int THREAD_COUNT = 5;
public static void main(String[] args) {
// 创建线程池
ExecutorService executorService = Executors.newFixedThreadPool(THREAD_COUNT);
// 创建对象
Student student = new Student("张三", 18, "计算机科学");
// 序列化对象到文件
try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(FILE_NAME))) {
oos.writeObject(student);
System.out.println("对象序列化成功!");
} catch (IOException e) {
e.printStackTrace();
}
// 创建多个线程读取对象
for (int i = 0; i < THREAD_COUNT; i++) {
executorService.execute(new ReadObjectTask());
}
// 关闭线程池
executorService.shutdown();
}
static class ReadObjectTask implements Runnable {
@Override
public void run() {
try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(FILE_NAME))) {
Student s = (Student) ois.readObject();
System.out.println(s);
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
}
}
class Student implements Serializable {
private String name;
private int age;
private String major;
public Student(String name, int age, String major) {
this.name = name;
this.age = age;
this.major = major;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
", major='" + major + '\'' +
'}';
}
}
```
在这个示例中,我们使用`ExecutorService`创建了一个包含5个线程的线程池。我们将`Student`对象序列化到文件中,然后启动多个线程读取该文件中的对象,并将读取到的对象输出。
需要注意的是,在多线程环境下,需要使用线程安全的方式来读写文件。在这个示例中,我们使用了`ExecutorService`来创建线程池,并创建了一个线程安全的`ReadObjectTask`类来读取文件中的对象。
阅读全文