我有一个全局静态链表,我在其中添加来自不同线程的数据,并且调度程序配置为每分钟运行一次以处理新的子列表,其中所有数据与父列表相同 注意:数据不断从不同的线程添加到列表中,因此我需要为当前处理获取一组数据,并在处理后立即将其删除。 当应用程序运行时,列表中存在我从未添加的空值,并且现在不存在添加的值。
输出类似
的内容一个
乙
ç
d
è
è
FF
^ h
FF
SS
DD
d
空
空
空
空
为最后四个空值添加的数据为AA
,BC
,DA
,AC
。当有超过500个请求时,这种情况最常发生。我已经尝试了所有的方法,并试图以各种方式进行调试,但即使我没有添加空值,它也会出现在列表中,导致数据丢失。
即使尺寸与我添加的数据相同也是如此。 以下是我的代码
全球列表类
import java.util.Date;
import java.util.LinkedList;
import java.util.List;
public class QueryData {
private static List<String> queryData;
private static QueryData instance;
private QueryData() {
if (queryData == null) {
queryData = initializeQueryData();
}
}
private List<String> initializeQueryData() {
System.out.println("Initializing new query Object" + new Date());
queryData = new LinkedList<>();
return queryData;
}
public static synchronized QueryData getInstance() {
if (instance == null) {
instance = new QueryData();
}
return instance;
}
public List<String> getQueryData() {
return queryData;
}
public boolean add(String value) {
if (value == null || value.isEmpty()) {
throw new IllegalArgumentException("Value NULL on list QueryData");
}
return queryData.add(value);
}
public void clearQueryData() {
initializeQueryData();
}
}
将我的数据添加到列表中的类
class Processor {
public boolean add(String value){
QueryData.getInstance().add(value);
}
public void processList(List<String> list) {
for(String str : list) {
System.out.println(str);
QueryData.getInstance().getQueryData().remove(str);
}
}
}
调度程序调用的类
class Test {
public void callProcess() {
List<String> processingList = new LinkedList<>();
processingList.addAll(QueryData.getInstance().getQueryData());
Processor p = new Processor ();
p.processList(processingList);
}
}
Jersey Web服务类,通过它可以向其添加数据。它被称为一分钟超过10000次。
@Path("/")
class Service {
@GET
@Path("/add/{value}")
public void callProcess(@PathParam("value") String value) {
Processor p = new Processor ();
p.add(value);
}
}