Java 线程不运行

Java 线程不运行,java,multithreading,Java,Multithreading,我在excel文件中有一些地方,每个点都有一个lng和lat坐标 现在,我尝试使用GoogleMapStaticMapAPI为每个点创建一个静态地图 我有两个组件,一个解析器和一个加载器 解析器用于读取excel文件,而加载的用于加载平铺 我让加载程序在一个seprate线程中运行 public class Parser { private static Parser instance; private StaticMapLoader loader; private P

我在excel文件中有一些地方,每个点都有一个lng和lat坐标

现在,我尝试使用GoogleMapStaticMapAPI为每个点创建一个静态地图

我有两个组件,一个解析器和一个加载器

解析器用于读取excel文件,而加载的用于加载平铺

我让加载程序在一个seprate线程中运行

public class Parser {
    private static Parser instance;
    private StaticMapLoader loader;

    private Parser(StaticMapLoader loader) {
        this.loader = loader;
    }

    public synchronized static Parser getInstance(StaticMapLoader loader) {
        if (instance == null) {
            instance = new Parser(loader);
        }
        return instance;
    }

    public void parse(String path) {
        List<Branch> result = new ArrayList<Branch>();

        InputStream inp;
        try {
            inp = new FileInputStream(path);
            Workbook wb = WorkbookFactory.create(inp);
            Sheet sheet = wb.getSheetAt(0);
            int rows = sheet.getLastRowNum();


            for(Row r : sheet.getRows){
                loader.addTask(r.type,r.name,r.x,r.y);
            }
        } catch (InvalidFormatException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
//      Branch bc = new Branch("网点1", null, null);
        return result;
    }

}
上面的代码运行,我将得到如下日志:

run 1
add task of ..
run 2
add task of ...
@Override
public void init() throws ServletException {
    super.init();

    try {
        URL fileUrl = getServletContext().getResource(getInitParameter("xlsxFile"));
        URL tilePath = getServletContext().getResource(getInitParameter("tilePath"));

        StaticMapLoader loader = new StaticMapLoader(tilePath.getPath());
        loader.startRunning();


        Parser.getInstance(loader).parse(fileUrl.getPath());

    } catch (MalformedURLException e) {
    }
}
但是,如果我对日志行进行注释,将永远不会调用
下载
,我将得到:

run 1
run 2
......
看来这可能是线程造成的,我错过了什么吗

顺便说一句,上面的代码在
HttpServlet
上下文中运行,我这样启动它们:

run 1
add task of ..
run 2
add task of ...
@Override
public void init() throws ServletException {
    super.init();

    try {
        URL fileUrl = getServletContext().getResource(getInitParameter("xlsxFile"));
        URL tilePath = getServletContext().getResource(getInitParameter("tilePath"));

        StaticMapLoader loader = new StaticMapLoader(tilePath.getPath());
        loader.startRunning();


        Parser.getInstance(loader).parse(fileUrl.getPath());

    } catch (MalformedURLException e) {
    }
}

你注释掉了日志行,然后见证了这行产生的输出?@MarkoTopolnik:没错。这就是为什么我感到惊讶。你认为这是线程问题吗?很明显,构建/执行环境存在问题。注释掉的行不可能显示运行时行为。事实上,我不确定是
线程
导致了问题。但我找不到其他原因。我使用maven和
mvnjetty:run
来启动应用程序。。。因此,当您添加新任务并试图同时删除第一个实体时,您的列表可能会受阻。。。顺便说一句:我会推荐一个线程。睡眠(…),以便让其他线程也有机会获得一些CPU能力。。。