生产者和消费者
自己实现这个队列,取出一个,移动一个,还要内存移动?NM,LinkedList来完成这个过程。
NM,人家就手写。设计能力的小程序
1:public class MyQueue
{
Private final LinkedList list = new LinkedList();//里面内容可变的
Private final LinedList list = new LinkedList();
Private AtomicInteger count = new AtomicInteger(0);
//满和空
//计数 这些你要有吧
Private AtomicInteger count = new AtomicInteger(0);
//上限 下限
Private final int minSize = 0;
Private final maxSize; / /随便给个容量,测试 放开,NM,这里就构造中实现即可
Public MyQueue(int maxSize)
{
this.maxSize = maxSize;
}
//现在可以put和take思路wait notfiy那必须加锁
Private final object lock = new Object();
//放入即可 没有返回值先
Public void put(object object)
{
//那就先加锁 环境这样
Synchronized(lock)
{
//看容器是不是满了
Whie(count.get() == maxSize)
{
Lock.wait();//我就等 我就一直等while
}
List.add(obj);
//新加入的元素 这就加入队列了
//Count.addandset();
count.incrementAndSet();
//完了吗?比如现在只有这一个,又一个人在阻塞的,你需要通知他
//再定义一个object ?通知即可!
Lock.notify();
}
}
Public object take()
{
//同样先加上锁
Object ret = null;
Synchronized(lock)
{
//同样 当前是空的,那就等呀
While(count.get() == this.minSize)
{
Lock.wait();
}
//来了,那就消费
Ret = list.removeFirst();//出一个
count.decrmentAndGet();//计数器
//可能是满了的 就等待你出去呢?
Lock.notfiy();
}
Return ret;
}
OK,写好了队列,这就随便的搞吧。随便的生成和测试。