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