gpt4 book ai didi

java - 如何确保 Java 中的并行处理

转载 作者:行者123 更新时间:2023-11-30 10:41:14 27 4
gpt4 key购买 nike

我有一个静态数组 arr,它的元素正在使用“squarring”方法进行平方并再次存储。我想要两个线程同时修改数组。每个线程在数组的一半上工作。

public class SimplerMultiExample {

private static int[] arr = new int[10];
public static void squarring(int start, int end)
{
for(int i=start; i<end; i++)
{
arr[i]*=arr[i];
System.out.println("here "+Thread.currentThread().getName());
}
}


private static Runnable doubleRun = new Runnable() {
@Override
public void run() {
if(Integer.parseInt(Thread.currentThread().getName())==1)
squarring(0,arr.length/2); //Thread named "1" is operaing on
//the 1st half of the array.
else
squarring(arr.length/2,arr.length);
}
};

public static void main(String[] args){

Thread doubleOne = new Thread(doubleRun);
doubleOne.setName("1");

Thread doubleTwo = new Thread(doubleRun);
doubleTwo.setName("2");

doubleOne.start();
doubleTwo.start();
}
}

'squarring' 方法中的 sysout 告诉我线程正在依次进入该方法,也就是说,一个线程在另一个线程访问它之前完成。结果,其中一个线程提前完成,而其他线程则需要相当长的时间才能完成。我已经用 100 万个元素测试了代码。请建议我可以做些什么来确保线程并行运行。P.S - 我使用的是双核系统。

最佳答案

您不必从头开始编程:

Arrays.parallelSetAll(arr, x -> x * x);

parallelSetAll 创建一个 parallel stream它为你做了所有的工作:

Set all elements of the specified array, in parallel, using the provided generator function to compute each element.

如果您想知道如何控制用于并行处理的线程数,请查看 this question .

关于java - 如何确保 Java 中的并行处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38580743/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com