簡體   English   中英

Java中的並行數組拷貝

[英]Parallel array copy in Java

我希望將一個數組並行復制到另一個數組中,例如:

int[] a = {1, 3, 5, 7, 9};
int[] b = new int[a.length];
for(int i = 0; i < a.length; i++) // parallel
{
   b[i] = a[i];
}

在此示例中,我希望一個線程復制前 3 個索引,另一個復制其他 2 個。當然,它也可以是任何其他變體。


需要考慮的事項:

  1. 我打算在非常大的 arrays 上運行它,所以小的開銷是可以的
  2. 循環體中可能添加了更多代碼,例如另一個數組 - c 將獲得 a[i]+1

我試過的:

  1. IntStream.range
    IntStream.range(0, a.length).parallel().forEach(i -> {
        b[i] = a[i];
    });

這導致在Local variable percentiles defined in an enclosing scope must be final or effectively final錯誤,因為b不是final的並且無法分配。

  1. fork/join:可能是這樣,但正在尋找不涉及聲明新 class 或擴展現有解決方案的其他解決方案。

沒有理由並行執行此操作。 因為您正在使用int[] ,所以可以使用clone()來復制它:

int[] a = {1, 3, 5, 7, 9};
int[] b = a.clone();

如果出於某種原因,您仍想並行執行此操作,則可以使用Arrays#parallelSetAll

Arrays.parallelSetAll(b, i -> a[i]);

對於每個片段, b的元素是等價的:

[1, 3, 5, 7, 9]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM