生产消费多线程+队列单机版@TOC
欢迎使用Markdown编辑器
package com.broker.broker.service.test.base;
import java.util.LinkedList;
import java.util.Queue;
public class productAndConsumer {
public static final Queue<Integer> queue = new LinkedList();
public static int maxNum = 5;
public static void main(String arry[]){
Thread proA = new Thread(new product("A"));
Thread proB = new Thread(new product("B"));
Thread proC = new Thread(new product("C"));
Thread conD = new Thread(new consumer("D"));
Thread conE = new Thread(new consumer("E"));
proA.start();
proB.start();
proC.start();
conD.start();
conE.start();
}
public static class product implements Runnable{
public int i=0;
public String name;
public int cl=0;
public product(String A){
this.name=A;
}
@Override
public void run(){
while (true){
if(cl==20){
System.out.println("生产已达标,停止线程");
return;
}
synchronized (queue){
if(queue.size()==maxNum){
System.out.println("queue队列已满,请等待消费");
i=0;
try {
queue.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}else{
cl+=1;
queue.offer(i++);
queue.notifyAll();
}
}
}
}
}
public static class consumer implements Runnable{
public String name;
public int xf=0;
public consumer(String A){
this.name=A;
}
@Override
public void run(){
while (true){
if(xf==20){
System.out.println("消费已达标,停止线程");
return;
}
synchronized (queue){
if(queue.isEmpty()){
System.out.println("queue队列已消费完,请通知生产者go on");
try {
queue.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
xf+=1;
int x = queue.poll();
System.out.println("queue队列消费值:"+x);
try {
Thread.sleep(200l);
} catch (InterruptedException e) {
e.printStackTrace();
}
queue.notifyAll();
}
}
}
}
}