//阻塞队列实现生产者消费者
static void consumerProducerTest1(){
LinkedBlockingQueue<Integer> queue=new LinkedBlockingQueue<Integer>(2);
new Thread(new Runnable() {
@Override
public void run() {
for(int i=0;i<10;i++){
try {
queue.put(i);
System.out.println("生产了:"+i+" 队列大小:"+queue.size());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
while (true){
try {
System.out.println("消费了:"+queue.take()+" 队列大小:"+queue.size());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
}
//wait()/notifyAll()实现
static void consumerProducerTest2(){
LinkedList<Integer> list=new LinkedList<Integer>();
new Thread(new Runnable() {
@Override
public void run() {
while(true){
synchronized (list){
if(list.size()<=2) {
list.add(1);
System.out.println(Thread.currentThread()+"生产了1个,"+" 队列大小:"+list.size());
} else{
list.notifyAll();
try {
list.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
while(true){
synchronized (list){
if(list.size()>0) {
list.removeFirst();
System.out.println(Thread.currentThread()+"消费了1个,"+" 队列大小:"+list.size());
} else{
list.notifyAll();
try {
list.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
}).start();
}