public enum SequenceEnum {
SEQUENCE;
SequenceEnum() {
}
private static final ConcurrentLinkedQueue<String> cache = new ConcurrentLinkedQueue<>();
private static final ReentrantLock lock = new ReentrantLock();
/**
*
* 出队
*/
public String poll() {
String seq = cache.poll();
if(StringUtils.isEmpty(seq)){
try {
lock.lock();
if(cache.isEmpty()){
offer(new SequenceGenerator().generateBatchSequence());
}
}catch (Exception e){
e.printStackTrace();
}finally{
lock.unlock();
}
}
return cache.poll();
}
/**
*
* 入队
*/
public void offer(String[] sequenceArray) {
for (String sequence : sequenceArray) {
cache.add(sequence);
}
}
/**
*
* 队列数量太大,不可使用,因为遍历整个队列,耗时过长
*/
public int size() {
return cache.size();
}
/**
*
* 判空使用此方法
*/
public boolean isEmpty(){
return cache.isEmpty();
}
}