public
class
CircleQueue<T> {
ReentrantLock reentrantLock =
new
ReentrantLock();
private
int
capacity =
5
;
private
int
current =
0
;
private
LinkedBlockingQueue<T>[] array =
new
LinkedBlockingQueue[capacity];
public
CircleQueue(){
}
public
CircleQueue(
int
capacity){
this
.capacity = capacity;
}
public
void
addData(T t) {
reentrantLock.lock();
LinkedBlockingQueue<T> clircleData =
null
;
clircleData = array[(current + capacity -
1
) % capacity];
if
(
null
== clircleData){
clircleData =
new
LinkedBlockingQueue<>();
array[(current + capacity -
1
) % capacity] = clircleData;
}
clircleData.add(t);
reentrantLock.unlock();
}
public
LinkedBlockingQueue<T> getData() {
reentrantLock.lock();
LinkedBlockingQueue<T> clircleData = array[current++%capacity];
reentrantLock.unlock();
return
clircleData;
}
public
static
void
main(String[] args) {
CircleQueue circleQueue =
new
CircleQueue();
circleQueue.addData(
"王伟"
);
Timer timer =
new
Timer(
false
);
timer.schedule(
new
TimerTask() {
@Override
public
void
run() {
LinkedBlockingQueue queue = circleQueue.getData();
if
(
null
!= queue){
System.out.println(queue.poll());
}
else
{
System.out.println(queue);
}
}
},
1000
,
1000
);
}
}