Producer 中只有一个 Product 实例 p,所以加到 Global.list 中的 p 是同一个对象,有可能 Producer
在连续的几个 i ,设置 p 的 name 和 date,加入 Global.list,但 p 是同一个对象,所以 name 和 date 都是最后一个 i 的值,然后 Consumer 从 Global.list 中取数据,取到的是同一个 p 对象,打印出的 name 和date 相同的几条记录。
正确的方法应该是 Producer 中每次往 Global.list 中添加不同的 Product 实例。
class Product {
private String name;
private String date;
public Product() {
super();
}
public Product(String name, String date) {
super();
this.name = name;
this.date = date;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
}
class Producer implements Runnable {
@Override
public void run() {
for (int i = 0; i < 5; ++i) {
try {
// System.out.println("begin to put: " + i);
Global.list.put(new Product("Name:" + i, "Date" + i));
// System.out.println("end to put: " + i);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}