这是我第一次尝试编写一个使用多线程的程序,所以我有几个关于在我的程序中使用并发的问题。
我的程序从 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...
}
}
在上面的代码中,我打算将一系列占位符定义为一个常量,它们将存储在 HashMap 中mapOfConstants
。
编辑:最终我可能想让这个地图的初始化从其他地方获取值,比如一个文本文件。
我的代码是否实现了在 的所有实例之间共享此占位符映射的目的,MyRunnable
只执行一次此初始化过程?