0

Я изучаю технологию fork-join в java и написал следующую программу. Я запускаю цикл for (5 раз), и я хочу запустить содержимое цикла for в отдельных потоках. Это происходит правильно. Проблема в том, что когда все потоки закончены, я хочу вектор размером 5 и должен содержать результат выполнения потока 1 по индексу 0, результат выполнения потока 2 по индексу 1 ........ .... результат выполнения потока 5 в индексе 4. Я чисто визуализирую то, чего хочу достичь, но не знаю синтаксиса для него.Java fork join issue

В настоящее время я просто получаю 1 номер в своем векторе.

import java.util.Random; 
import java.util.Vector; 
import java.util.concurrent.*; 


public class App { 
    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     ExecutorService executor = Executors.newCachedThreadPool(); 
     Future<Vector<Integer> > futureResult = null; 
     for(int i = 0; i < 5; i++){ 
      futureResult = executor.submit(new Callable<Vector<Integer> >(){ 
       @Override 
       public Vector<Integer> call() throws Exception { 
        Random random = new Random(); 
        int duration = random.nextInt(4000);      
        Vector<Integer> v = new Vector<Integer>(); 
        v.add(duration); 
        return v; 
       } 
      }); 
     } 

     executor.shutdown(); 

     try { 
      System.out.println(futureResult.get()); 
     } catch (InterruptedException | ExecutionException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

ответ

1

Вы создаете новый вектор в каждом потоке без какого-либо соединения с разделяемой памятью. Вы можете просто передать индекс для записи на каждый поток, а также изменить вектор на массив или что-то заранее выделенное.

Другим вариантом было бы присвоить 5 позиций вектора и отправить каждый объект Integer в его поток.

+0

ОК спасибо buuuuuuudy Позвольте мне попробовать это ... – VVV

+0

спасибо, приятель, который решил мою проблему. – VVV