class Data {
private String name;
private int amount;
public void set(String name, int amount) {
this.name = name;
this.amount = amount;
}
public void get() {
System.out.println(this.name + "= " + this.amount--);
}
public int getAmount() {
return this.amount;
}
}
class DataProvider implements Runnable {
private Data data;
private int num;
public DataProvider(Data data, int num) {
this.data = data;
this.num = num;
}
@Override
public void run() {
// TODO Auto-generated method stub
data.set("苹果", this.num);
}
}
class DataConsumer implements Runnable {
private Data data;
public DataConsumer(Data data) {
this.data = data;
}
@Override
public void run() {
// TODO Auto-generated method stub
for (int x = 0; x < data.getAmount(); x++) { //循环 设的数,就应该是30,但是只执行到一半,而直接写30就行.
data.get();
}
}
}
public class AA {
public static void main(String[] args) {
// TODO Auto-generated method stub
Data data = new Data();
new Thread(new DataProvider(data, 30)).start();
new Thread(new DataConsumer(data)).start();
}
}
问题在注释哪里,为什么消费者的循环不能执行完?? 只执行一半
private String name;
private int amount;
public void set(String name, int amount) {
this.name = name;
this.amount = amount;
}
public void get() {
System.out.println(this.name + "= " + this.amount--);
}
public int getAmount() {
return this.amount;
}
}
class DataProvider implements Runnable {
private Data data;
private int num;
public DataProvider(Data data, int num) {
this.data = data;
this.num = num;
}
@Override
public void run() {
// TODO Auto-generated method stub
data.set("苹果", this.num);
}
}
class DataConsumer implements Runnable {
private Data data;
public DataConsumer(Data data) {
this.data = data;
}
@Override
public void run() {
// TODO Auto-generated method stub
for (int x = 0; x < data.getAmount(); x++) { //循环 设的数,就应该是30,但是只执行到一半,而直接写30就行.
data.get();
}
}
}
public class AA {
public static void main(String[] args) {
// TODO Auto-generated method stub
Data data = new Data();
new Thread(new DataProvider(data, 30)).start();
new Thread(new DataConsumer(data)).start();
}
}
问题在注释哪里,为什么消费者的循环不能执行完?? 只执行一半