编程中有一个经典的多线程问题:有两个线程,一个负责写入数据,一个负责读出数据,当两个线程同步运行时,如何保证数据的准确性和安全性?人们将这一问题抽象成生产者-消费者模型。
//有一个数据模型Person类,包含三个属性以及写入和读取这三个属性的方法。
public class Person {
private String name;
private String gender;
private int age;
public Person() {};
public Person(String name,String gender,int age){
this.name=name;
this.gender=gender;
this.age=age;
}
public void setName(String name) {
this.name = name;
}
public void setGender(String gender) {
this.gender = gender;
}
public void setAge(int age) {
this.age = age;
}
public void show() {
System.out.println(name+"-"+gender+"-"+age);
}
}
//生产者模型,一个Porducer类实现了Runnable借口,负责写入Person类的三个属性
public class Producer implements Runnable {
Person p;
public Producer(Person p) {
this.p=p;
}
@Override
public void run() {
// TODO Auto-generated method stub
try {
Thread.sleep(500);
}catch(Exception e) {
e.printStackTrace();
}
int i=0;
while(true) {
if(i==0) {
p.setName("mike");
p.setGender("male");
p.setAge(20);
}
else {
p.setName("mary");
p.setGender("famale");
p.setAge(17);
}
i=(i+1)%2;
}
}
}
//消费者模型Consunmer,同样实现了Runnable接口,负责读取此时Person的三个属性值
public class Consumer