消息中间件
Efficient work, excellent efficiency。
talk is cheap, show me the code,make a better result.
目录
概述
首先我们先考虑Spring,其中最重要的就是AOP。
需求:
需求整理如下:
1.消息消费。
2消息监听等机制
设计思路
暂无
实现思路分析
1. 创建一个装队列的容器
2.创建一个计数器
3.筛选出匹配容器管理类的切面aspectlist //创建容器的最大值和最小值
拓展Demo实现
相关代码如下:
1.定义默认切面类
ublic class MyQueue1 {
//创建一个装队列的容器
private LinkedList<Object> list = new LinkedList<>();
//创建一个计数器
private AtomicInteger count = new AtomicInteger(0);
//创建容器的最大值和最小值
private final int minSize = 0;
private final int maxSize ;
public MyQueue1(int size){
this.maxSize = size;
}
private final Object lock = new Object();
public void put(Object obj){
synchronized (lock) {
if (count.get() == this.maxSize) {
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
//把对象加入容器
list.add(obj);
//计算容器的数值
count.incrementAndGet();
//唤醒等待的线程
lock.notify();
System.out.println("新加入的元素为:" + obj);
}
}
public Object take(){
Object ret =null;
synchronized (lock) {
if (count.get() == this.minSize) {
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
ret = list.removeFirst();
count.decrementAndGet();
lock.notify();
}
return ret;
}
public int Size(){
return this.count.get();
}
public static void main(String[] args) {
final MyQueue1 mq = new MyQueue1(5);
mq.put(1);
mq.put(2);
mq.put(3);
mq.put(4);
mq.put(5);
System.out.println("当前容器的长度:" + mq.Size());
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
mq.put(6);
mq.put(7);
}
},"t1");
t1.start();
try {
TimeUnit.SECONDS.sleep(2);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Thread t2 = new Thread(new Runnable() {
@Override
public void run() {
Object o1 = mq.take();
System.out.println("移除的元素为:" + o1);
Object o2 = mq.take();
System.out.println("移除的元素为:" + o2);
}
},"t2");
t2.start();
}
}
实验效果:
略
分析:
待补充
小结:
主要讲述了消息原理和简单实现,里面有许多不足,请大家指正~
参考资料和推荐阅读
欢迎阅读,各位老铁,如果对你有帮助,点个赞加个关注呗!~