Пытаюсь передать в 24 потока сет и оттуда на выходе получить map с результатом работы всех этих потоков. Не работает. Что я делаю не так? Подскажите пожалуйста.
В идеале надо как-то сделать чтобы эта программа могла загрузить любой процессор до 100% независимо от кол-ва ядер. (вместо str+str там будут огромные расчеты)
package used;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.*;
public class ExecutorServiceExample {
public static Map<String, String> adresWhisW = new ConcurrentHashMap();
CountDownLatch []cdl = new CountDownLatch[24];
public static void main(String args[]) {
Set<String> ss=new HashSet();
ss.add("вася");
ss.add("петя");
new ExecutorServiceExample(ss);
for (Map.Entry<String, String> entry : adresWhisW.entrySet()) {
System.out.println(entry.getKey() + " " + entry.getValue());
}
}
ExecutorServiceExample(Set<String> ss) {
for (int tr = 1; tr < 24; tr++) {
cdl[tr] = new CountDownLatch(24);
}
ExecutorService executor;
executor = Executors.newFixedThreadPool(24);
for (int tr = 1; tr < 24; tr++) {
executor.execute(new MyThread(ss));
}
for (int tr = 1; tr < 24; tr++) {
try {
cdl[tr].await();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
executor.shutdown();
}
public class MyThread implements Runnable {
private Set<String> strSet;
private Map<String, String> outputMap;
public MyThread(Set<String> strSet) {
this.strSet = strSet;
this.outputMap = outputMap;
}
@Override
public void run() {
for (String str : strSet) {
str=str+str;
outputMap.put(str, str);
}
}
}
}
Exception in thread "pool-1-thread-2" Exception in thread "pool-1-thread-7" java.lang.NullPointerException
at used.ExecutorServiceExample$MyThread.run(ExecutorServiceExample.java:72)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
java.lang.NullPointerException
at used.ExecutorServiceExample$MyThread.run(ExecutorServiceExample.java:72)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Exception in thread "pool-1-thread-5" Exception in thread "pool-1-thread-3" java.lang.NullPointerException
at used.ExecutorServiceExample$MyThread.run(ExecutorServiceExample.java:72)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
java.lang.NullPointerException