私はこの次の問題で立ち往生しています。たとえば、1000個のアイテムがあるリクエストがあり、これを解決するためにJavaExecutorを利用したいとします。
これが主な方法です
public static void main(String[] args) {
//Assume that I have request object that contain arrayList of names
//and VectorList is container for each request result
ExecutorService threadExecutor = Executors.newFixedThreadPool(3);
Vector<Result> vectorList = new Vector<Result();
for (int i=0;i<request.size();i++) {
threadExecutor.execute(new QueryTask(request.get(i).getNames, vectorList)
}
threadExecutor.shutdown();
response.setResult(vectorList)
}
そしてこれがQueryTaskクラスです
public QueryTask() implements Runnable {
private String names;
private Vector<Result> vectorList;
public QueryTask(String names, Vector<Result> vectorList) {
this.names = names;
this.vectorList = vectorList;
}
public void run() {
// do something with names, for example, query database
Result result = process names;
//add result to vectorList
vectorList.add(result);
}
}
したがって、上記の例に基づいて、リクエストに含まれるデータごとにスレッドプールを作成し、それを同時に実行して、結果をVectorListに追加します。そして、プロセスの最後に、すべての結果をベクターリストに入れておきたいと思います。
応答に一貫性のない結果が出続けます。たとえば、10個の名前でリクエストを渡すと、3個または4個しか返されません。場合によっては、応答に何も返されません。私は10を通過すると、10を取り戻すことを期待していました。
誰かが問題の原因を知っていますか?
どんな助けでもそれを高く評価するでしょう。
ありがとう