【发布时间】:2013-07-02 09:23:01
【问题描述】:
这是我第一次尝试编写使用多线程的程序,所以我有几个关于在我的程序中使用并发的问题。
我的程序从 Web UI 获取用户输入,然后使用该用户输入启动一个进程。我知道我必须使用并发,因为这个过程需要一个多小时,而且我不可能让用户在开始下一个过程之前等待一个过程完成。
以下简化代码处理用户输入,然后启动该过程。
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String myInput = request.getParameter("input");
Thread t = new Thread(new MyRunnable(myInput));
t.start();
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("Process started!");
out.close();
}
以下代码是我实际过程的简化。
public class MyRunnable implements Runnable {
private static HashMap<String,String> mapOfConstants = null;
private String member;
public MyRunnable(String member) {
this.member = member;
}
@Override
public void run() {
if (mapOfConstants == null) init();
// and so on...
}
private void init() {
mapOfConstants = new HashMap<String,String>();
mapOfConstants.put("LOCATION", "http://localhost/folder");
// and so on...
}
}
在我上面的代码中,我打算将一系列占位符定义为一个常量,将存储在HashMapmapOfConstants中。
编辑: 最终我可能想让这个映射的初始化从其他地方获取值,比如一个文本文件。
我的代码是否实现了在 MyRunnable 的所有实例之间共享此占位符映射的目的,只执行一次此初始化过程?
【问题讨论】:
-
对于初学者,您可以将地图设为
final并在声明时对其进行初始化。 -
请不要在一个 Stack Overflow 问题中要求多个答案。编辑您的问题以仅包含一个问题,并在必要时发布后续问题。
-
编辑了我的问题并阐明了我的意图
标签: java multithreading concurrency static