生产者代码:
package JavaDay5_18.JavaThread;
import java.util.Queue;
/**
* @author myvina@qq.com
* @date 18-5-18 下午4:21
*/
public class Producer implements Runnable{
private Queue<Integer> product;
public Producer(Queue<Integer> product) {
this.product = product;
}
@Override
public void run() {
for(int i = 0; i <= 4; i++) {
synchronized (product) {
while(product.size() >= 2) {
System.out.println("商品货存已满");
try {
product.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
product.add(i);
System.out.println("Producing " + i);
product.notifyAll();
}
}
}
}
消费者代码:
package JavaDay5_18.JavaThread;
import java.util.Queue;
/**
* @author myvina@qq.com
* @date 18-5-18 下午4:22
*/
public class Consumer implements Runnable {
private Queue<Integer> product;
public Consumer(Queue<Integer> product) {
this.product = product;
}
@Override
public void run() {
while (true) {
synchronized (product) {
if(product.isEmpty()) {
System.out.println("商品缺货");
try {
product.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
int number = product.poll();
System.out.println("Consuming " + number);
product.notifyAll();
if(number == 4) {
break;
}
}
}
}
}
测试代码:
package JavaDay5_18.JavaThread;
import java.util.LinkedList;
import java.util.Queue;
/**
* @author myvina@qq.com
* @date 18-5-18 下午4:43
*/
public class Test {
public static void main(String[] args) {
Queue<Integer> product = new LinkedList<>();
Thread producer = new Thread(new Producer(product));
Thread consumer = new Thread(new Consumer(product));
producer.start();
consumer.start();
}
}
运行结果: