spring的全流程
手写生产者和消费者
使用object的wait和notify方法
生产者
import java.util.List;
public class Producer implements Runnable {
private List<String> queue;
public void run() {
synchronized (queue) {
while (true) {
while (queue.size() == MqTest.MAX_COUNT) {
try {
queue.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println(Thread.currentThread().getName() + "在生产!!!!");
queue.add(String.valueOf(Math.random()));
queue.notifyAll();
}
}
}
public List<String> getQueue() {
return queue;
}
public void setQueue(List<String> queue) {
this.queue = queue;
}
}
消费者
import java.util.List; public class Comsumer implements Runnable { private List<String> queue; public void setQueue(List<String> queue) { this.queue = queue; } public List<String> getQueue() { return queue; } public void run() { synchronized (queue) { while (true) { while (queue.size() == 0) { try { queue.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println(Thread.currentThread().getName() + "在消费!!!!"); queue.remove(0); queue.notifyAll(); } } } }
生产过程
import java.util.ArrayList; import java.util.List; public class MqTest { public static final int MAX_COUNT = 10; public static void main(String[] args) { List<String> queue = new ArrayList<String>(); Producer producer = new Producer(); producer.setQueue(queue); Thread t1 = new Thread(producer); t1.setName("生产者1"); Producer producer1 = new Producer(); producer1.setQueue(queue); Thread t3 = new Thread(producer1); t3.setName("生产者2"); Producer producer2 = new Producer(); producer2.setQueue(queue); Thread t4 = new Thread(producer2); t4.setName("生产者3"); Comsumer comsumer = new Comsumer(); comsumer.setQueue(queue); Thread t2 = new Thread(comsumer); t2.setName("消费者1"); Comsumer comsumer1 = new Comsumer(); comsumer1.setQueue(queue); Thread t5 = new Thread(comsumer1); t5.setName("消费者2"); t1.start(); t2.start(); t3.start(); t4.start(); t5.start(); } }
浙公网安备 33010602011771号