マルチスレッドを利用するプログラムを書くのはこれが初めてなので、プログラムでの並行性の使用に関していくつか質問があります。
私のプログラムは、Web UI からユーザー入力を受け取り、そのユーザー入力でプロセスを開始します。このプロセスには 1 時間以上かかるため、並行性を利用する必要があることはわかっています。また、あるプロセスが完了するのを待ってから次のプロセスを開始することはできません。
次の簡略化されたコードは、ユーザー入力を処理してからプロセスを開始します。
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
、この初期化プロセスを 1 回だけ実行するという目的を達成していますか?