0

我學習Java中的fork-join技術,寫了下面的程序。我正在運行for循環(5次),我想在單獨的線程中運行for循環的內容。這是正確的。問題是,當所有線程完成時,我想要一個大小爲5的向量,它必須包含在索引0處執行線程1的結果,在索引1處執行線程2的結果........ ....在索引4處執行線程5的結果。我乾淨地直觀地顯示了我想實現的內容,但不知道它的語法。的Java叉加入問題

目前,我會在我的向量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個向量位置和每一個整數對象發送到其線程。

+0

好,謝謝buuuuuuudy讓我試試這個...... – VVV

+0

感謝好友時,該解決我的問題。 – VVV