消费者
import java.util.Queue;
public class Customer implements Runnable {
private Queue<String> queue ;
public Customer(Queue<String> queue) {
this.queue = queue;
}
@Override
public void run() {
while(true){
synchronized (queue){
while(queue.isEmpty()){
System.out.println("数据队列为空,请生产者生产数据");
try {
queue.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
String data = queue.remove() ;
System.out.println("当前取出的数据为:"+data);
queue.notify();
}
}
}
}
生产者
import java.util.Queue;
public class Producer implements Runnable {
private Queue<String> queue ;
private int maxSize ;
public Producer(Queue<String> queue, int maxSize) {
this.queue = queue;
this.maxSize = maxSize;
}
@Override
public void run() {
int num = 0 ;
while (true){
num ++ ;
synchronized (queue){
while(queue.size() == maxSize){
System.out.println("数据队列已满,请消费者读取数据");
try {
queue.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
queue.add("数据"+num) ;
System.out.println("生产数据:数据"+num);
queue.notify();
}
}
}
}
测试
import java.util.LinkedList;
import java.util.Queue;
public class CustomerProducerDemo {
public static void main(String[] args) {
Queue<String> queue = new LinkedList<>() ;
Producer producer = new Producer(queue , 10) ;
Customer customer = new Customer(queue) ;
Thread t1 = new Thread(producer) ;
Thread t2 = new Thread(customer) ;
t1.start() ;
t2.start() ;
}
}