ArrayList 先进先出特性实现简单队列
程序员文章站
2022-03-14 15:04:57
...
ArrayList的线性特性是我们设计简单队列的一种方式;
以一个日志处理的类为例:
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import com.gan.eri.compu.entity.Log;
import com.gan.eri.compu.service.NodeService;
/**
* 日志处理类
*/
public class LogProcessor extends Thread {
private Logger logger = LoggerFactory.getLogger(LogProcessor.class);
private String nodeAddr;
private List<Log> queue;
@Autowired
private NodeService nodeService;
public void init(String nodeAddr) {
this.nodeAddr = nodeAddr;
this.queue = new ArrayList<Log>();
this.start();
}
public void write(String content, String type, int executeId, String scriptName, int detailId) {
synchronized (queue) {
Log log = new Log();
log.setNodeAddr(nodeAddr);
log.setType(type);
log.setContent(content);
log.setExecuteId(executeId);
log.setDetailId(detailId);
log.setScriptName(scriptName);
log.setCreateTime(new Date());
queue.add(log);
queue.notify();
}
}
@Override
public void run() {
logger.info("LogProcessor is starting...");
Log log = null;
while (!interrupted()) {
try {
synchronized (queue) {
while (queue.isEmpty()) {
queue.wait();
}
log = queue.remove(0);
}
} catch (InterruptedException ie) {
logger.info("LogProcessor interrupted!");
break;
}
if (log != null) {
try {
nodeService.saveLog(log);
} catch (Exception e) {
logger.error("LogProcessor error! {}", e);
}
}
}
}
public void close() {
this.interrupt();
this.queue.clear();
}
}