@SankaSanka

Как использовать ExecutorService?

Пытаюсь передать в 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
  • Вопрос задан
  • 159 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы