用java实现一个数据单元,包括学号,姓名两部分。编写两个线程,一个线程往数据单元中写,另一个线程往出读。要求每写一次就往出读一次
时间: 2024-03-01 20:56:11 浏览: 101
实验四:面向对象的系统建模B1
好的,我来回答你的问题。
首先,我们可以定义一个 `DataUnit` 类来表示数据单元,其中包括学号和姓名两个属性,以及对应的 getter 和 setter 方法。
```java
public class DataUnit {
private String id;
private String name;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
```
接下来,我们可以定义两个线程,一个是写线程 `WriteThread`,另一个是读线程 `ReadThread`。在写线程中,我们可以往数据单元中写入数据,然后通过 `notify()` 方法通知读线程进行读取操作。在读线程中,我们可以通过 `wait()` 方法等待写线程的通知,然后读取数据单元中的数据。
下面是完整的代码实现:
```java
public class DataUnit {
private String id;
private String name;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public class WriteThread extends Thread {
private DataUnit data;
private int count;
public WriteThread(DataUnit data, int count) {
this.data = data;
this.count = count;
}
public void run() {
for (int i = 0; i < count; i++) {
synchronized (data) {
String id = "id" + i;
String name = "name" + i;
data.setId(id);
data.setName(name);
System.out.println("WriteThread: " + i + " write: " + id + ", " + name);
data.notify();
}
}
}
}
public class ReadThread extends Thread {
private DataUnit data;
private int count;
public ReadThread(DataUnit data, int count) {
this.data = data;
this.count = count;
}
public void run() {
for (int i = 0; i < count; i++) {
synchronized (data) {
try {
data.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
String id = data.getId();
String name = data.getName();
System.out.println("ReadThread: " + i + " read: " + id + ", " + name);
}
}
}
}
public class Main {
public static void main(String[] args) {
DataUnit data = new DataUnit();
WriteThread writeThread = new WriteThread(data, 10);
ReadThread readThread = new ReadThread(data, 10);
writeThread.start();
readThread.start();
}
}
```
在这个例子中,我们创建了一个数据单元 `DataUnit`,并且创建了一个写线程 `WriteThread` 和一个读线程 `ReadThread`。在 `WriteThread` 中,我们往数据单元中写入数据,并且通过 `notify()` 方法通知读线程进行读取操作。在 `ReadThread` 中,我们通过 `wait()` 方法等待写线程的通知,然后读取数据单元中的数据。
注意,在 `synchronized` 块中调用 `wait()` 方法会释放锁,让其他线程可以获取到锁。在调用 `notify()` 方法之前,必须获取到对象的锁。此外,我们可以通过 `wait()` 方法的参数来设置等待的时间,这样可以避免线程无限等待的情况。
阅读全文