gpt4 book ai didi

java - 如何在 java 7 (android) 中并行化嵌套循环

转载 作者:行者123 更新时间:2023-11-30 01:23:20 25 4
gpt4 key购买 nike

我有以下代码 fragment

 String result;
for (int s1 = 0; s1 < 10; s1++)
for (int s2 = 0; s2 < 100; s2++)
for (int s3 = 0; s3 < 10; s3++)
for (int s4 = 0; s4 < 100; s4++)
{
result = doSomething(s1, s2, s3, s4);
if (result != null)
addResult(result); //adds results to an ArrayList of strings
}

如何并行化此代码以使其更快?我在这里看到类似的帖子并行化单个循环,但我想均匀地并行化整个事情以使其在 Android 设备上正常运行。

最佳答案

您可以使用 AsyncTask 来并行化每个 s1 执行,例如:

for (int s1 = 0; s1 < 10; s1++)
{
new AsyncTask<Integer, Object, ArrayList<String>>()
{
@Override
protected ArrayList<String> doInBackground(Integer... params)
{
ArrayList<String> results = new ArrayList<>();
for (int s2 = 0; s2 < 100; s2++)
{
for (int s3 = 0; s3 < 10; s3++)
{
for (int s4 = 0; s4 < 100; s4++)
{
results.add(doSomething(params[0], s2, s3, s4));
}
}
}
return results;
}

@Override
protected void onPostExecute(ArrayList<String> results)
{
for(String result : results) {
if (result != null)
addResult(result);
}
}
}.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, s1);
};

请注意,这假设 addResult 调用的顺序无关紧要,当然 doSomething 调用不会通过修改某些共享状态而相互干扰。

如果 addResult 调用的顺序很重要,您可以通过创建所有结果的数组来解决这个问题,等待它们全部完成(通过创建一个计数器,并等待所有 10 个任务完成,然后按顺序处理结果数组。

关于java - 如何在 java 7 (android) 中并行化嵌套循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36779036/

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