有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java链表自动添加空值

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

输出类似于

A
B
C
D
E
E
FF
H
FF
SS
DD
D
null
null
null
null

为最后四个空值添加的数据是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) 个答案