Linked List会自动添加空值

时间:2018-03-29 16:12:33

标签: java list jersey

我有一个全局静态链表,我在其中添加来自不同线程的数据,并且调度程序配置为每分钟运行一次以处理新的子列表,其中所有数据与父列表相同 注意:数据不断从不同的线程添加到列表中,因此我需要为当前处理获取一组数据,并在处理后立即将其删除。 当应用程序运行时,列表中存在我从未添加的空值,并且现在不存在添加的值。

输出类似

的内容
  

一个   
乙   
ç   
d   
è   
è   
FF   
^ h   
FF   
SS   
DD   
d   
空   
空   
空   

为最后四个空值添加的数据为AABCDAAC。当有超过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);
    }
}

0 个答案:

没有答案