生产者和消费者

2017-05-10  本文已影响0人  辰晞

自己实现这个队列,取出一个,移动一个,还要内存移动?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,写好了队列,这就随便的搞吧。随便的生成和测试。

上一篇 下一篇

猜你喜欢

热点阅读