如何同时处理数组,使其代码更简洁高效?

2026-04-02 15:061阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计473个文字,预计阅读时间需要2分钟。

如何同时处理数组,使其代码更简洁高效?

将伪代码简化并转换为直接输出结果,不超过100字:

将线性循环转换为并发循环:使用线程或异步编程库,如 Java 的 CompletableFuture 或 Python 的 asyncio,并行处理列表项:

我想将这个线性循环转换为并发循环:for(Itemitem:ItemList){processItem(item);}这真的是最短的方式吗?classWorkerimplement

我想将这个线性循环转换为并发循环:

for(Item item : ItemList) { processItem(item);}

这真的是最短的方式吗?

class Worker implements Runnable { Item item; Worker(Item item) { this.item = item; } public void Run() { processItem(item); }}ExecutorService exec = Executors.newFixedThreadPool(THREADPOOL_SIZE);for(Item item : ItemList) { exec.execute(new Worker(item));}exec.shutdown();boolean properFinish = false;try { properFinish = exec.awaitTermination(50, TimeUnit.SECONDS);} catch (InterruptedException e) { Thread.currentThread().interrupt();}

具体来说,我想要一种使用匿名类的方法,但实际上,任何使这种更短和更易读的方法都会受到赞赏.

更新:刚刚意识到我有点愚蠢,因为在这个例子中使用匿名类很容易:

for(final Item item : ItemList) { exec.execute(new Runnable() { public void run() { processItem(item); } });}

在我的原始代码中,循环是一个简单的(i = 0; i<= ItemList.length(); i)我想不出一种让我以任何有意义的方式进入最终的方法.我想使用“for each”循环可以使情况更好.还有什么方法可以摆脱其余的样板?更新2:使用ExecutorCompletionService,假设processItem返回结果.

ExecutorService exec = Executors.newFixedThreadPool(THREADPOOL_SIZE);CompletionService ecs = new ExecutorCompletionService(executor);for(final Item item : ItemList) { ecs.submit(new Callable() { public ResultType call() { return processItem(item); } });}for(Item item : item) { // Do whatever with the results ecs.take().get();}

这确实看起来更好.

解决方法:

如何同时处理数组,使其代码更简洁高效?

查看JDK 6中的ExecutorCompletionService – 而不是旋转自己的.它允许您为分配的任务执行多个线程,并在处理时获取每个线程的结果.

本文共计473个文字,预计阅读时间需要2分钟。

如何同时处理数组,使其代码更简洁高效?

将伪代码简化并转换为直接输出结果,不超过100字:

将线性循环转换为并发循环:使用线程或异步编程库,如 Java 的 CompletableFuture 或 Python 的 asyncio,并行处理列表项:

我想将这个线性循环转换为并发循环:for(Itemitem:ItemList){processItem(item);}这真的是最短的方式吗?classWorkerimplement

我想将这个线性循环转换为并发循环:

for(Item item : ItemList) { processItem(item);}

这真的是最短的方式吗?

class Worker implements Runnable { Item item; Worker(Item item) { this.item = item; } public void Run() { processItem(item); }}ExecutorService exec = Executors.newFixedThreadPool(THREADPOOL_SIZE);for(Item item : ItemList) { exec.execute(new Worker(item));}exec.shutdown();boolean properFinish = false;try { properFinish = exec.awaitTermination(50, TimeUnit.SECONDS);} catch (InterruptedException e) { Thread.currentThread().interrupt();}

具体来说,我想要一种使用匿名类的方法,但实际上,任何使这种更短和更易读的方法都会受到赞赏.

更新:刚刚意识到我有点愚蠢,因为在这个例子中使用匿名类很容易:

for(final Item item : ItemList) { exec.execute(new Runnable() { public void run() { processItem(item); } });}

在我的原始代码中,循环是一个简单的(i = 0; i<= ItemList.length(); i)我想不出一种让我以任何有意义的方式进入最终的方法.我想使用“for each”循环可以使情况更好.还有什么方法可以摆脱其余的样板?更新2:使用ExecutorCompletionService,假设processItem返回结果.

ExecutorService exec = Executors.newFixedThreadPool(THREADPOOL_SIZE);CompletionService ecs = new ExecutorCompletionService(executor);for(final Item item : ItemList) { ecs.submit(new Callable() { public ResultType call() { return processItem(item); } });}for(Item item : item) { // Do whatever with the results ecs.take().get();}

这确实看起来更好.

解决方法:

如何同时处理数组,使其代码更简洁高效?

查看JDK 6中的ExecutorCompletionService – 而不是旋转自己的.它允许您为分配的任务执行多个线程,并在处理时获取每个线程的结果.