Как разделить Hashmap между потоками в Java?

#java #multithreading #java-threads

#java #многопоточность #java-потоки

Вопрос:

При печати я получаю пустую hashmap, каков наилучший подход для совместного использования статической изменчивой переменной между потоками?

 class RunnableDemo implements Runnable {
      int i;
      RunnableDemo(int i) {
          i = i;
      }

      public void run(){
         finResult.put("value" str(i), 1);
      } 

      public void start () {
          System.out.println("Starting " );
          if (t == null) {
             t = new Thread (this);
             t.start ();
      }
}

public class TestThread {
    public static volatile ConcurrentHashMap<String, Integer> finResult = new ConcurrentHashMap<String, Integer>();

    public static void main(String args[]) {
        ThreadPoolExecutor executor = (ThreadPoolExecutor) Executors.newCachedThreadPool();
        for(int i=0; i < 4; i  ){
            RunnableDemo task = new RunnableDemo(i);
            executor.execute(task);
        }
        executor.shutdown();
    }
    System.out.println(TestThread.finResult);
} 
  

System.out.println(TestThread.finResult); Это должно вывести finResult со всеми значениями из потоков.

Комментарии:

1. Ответ «вы, вероятно, не должны». Каково предполагаемое использование? Похоже CyclicBarrier , что это может быть.

2. Я просто хочу обновляться finResult из всех потоков. Вместо того, чтобы возвращать какое-либо значение, я помещаю значения в глобальную общую переменную.

3. parallelStream() ?

4. У меня есть два варианта: 1) Возвращать значение из потоков (которое я не знаю, как это сделать) и 2) Иметь global variable , которое модифицируется потоками с использованием sync block. Я сосредоточен на втором варианте.

5. Не могли бы вы опубликовать полный компилируемый код? Для чего нужен метод «start ()»? Кроме того, i=i не имеет смысла в конструкторе и для чего нужен str(i) ?