package monitormethod;
public class Test {
public static void main(String[] args) {
Warehouse warehouse = new Warehouse();
new Producer(warehouse).start();
new Consumer(warehouse).start();
}
}
package monitormethod;
public class Warehouse {
Producets[] producets = new Producets[10];
int count = 0;
public synchronized void push(Producets ps) {
if (count == producets.length) {
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
producets[count++] = ps;
this.notifyAll();
}
public synchronized Producets pop() {
if (count == 0) {
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
count--;
this.notifyAll();
return producets[count];
}
}
package monitormethod;
public class Producets {
private int id;
public Producets(int id) {
this.id = id;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
package monitormethod;
public class Producer extends Thread {
Warehouse warehous;
public Producer(Warehouse warehouse) {
this.warehous = warehouse;
}
@Override
public void run() {
for (int i = 0; i < 100; i++) {
System.out.println("生产第 " + i + " 个产品");
warehous.push(new Producets(i));
}
}
}
package monitormethod;
public class Consumer extends Thread {
Warehouse warehous;
public Consumer(Warehouse warehouse) {
this.warehous = warehouse;
}
@Override
public void run() {
for (int i = 0; i < 100; i++) {
System.out.println("消费第 " + warehous.pop().getId() + " 个元素");
}
}
}