运行程序时遇到问题。在一次执行时,列表(HashMap)具有大小,而在另一次执行时,HashMap产品具有不同的大小。 下面是我创建线程池的方法代码......
public HashMap<Integer, MatrixIndex> getMultiplyMatrix(HashMap<Integer, MatrixIndex> rowsMap, HashMap<Integer, MatrixIndex> colsMap,
int noThreads) throws InterruptedException {
HashMap<Integer, MatrixIndex> product = new HashMap<Integer, MatrixIndex>();
ExecutorService pool = Executors.newFixedThreadPool(noThreads);
for (int i = 0; i < rowsMap.size(); i++) {
pool.submit(new MultiplyMatrix(rowsMap, colsMap, product, i));
}
pool.shutdown();
pool.awaitTermination(1, TimeUnit.DAYS);
return product;
}
方法run()
public void run() {
Map<Integer, Double> mapRow = rowsMap.get(row).getMap();
MatrixIndex s = new MatrixIndex();
for (int j = 0; j < columnsMap.size(); j++) {
Map<Integer, Double> mapCol = columnsMap.get(j).getMap();
double sum = 0.0;
for (Map.Entry<Integer, Double> entry : mapCol.entrySet()) {
int val = entry.getKey();
if (mapRow.containsKey(val)) {
sum += mapRow.get(val).doubleValue() * entry.getValue();
}
}
s.add(j, sum);
}
product.put(row, s);
}
}
我称之为product = p.getMultiplyMatrix(rowsMap,columnsMap,4); 如果我运行多次程序,product.size()是不同的。 同步线程有问题吗?感谢