gpt4 book ai didi

java - 如何使 Runnable 的内部类实现与 java 中的 Executor 一起工作?

转载 作者:行者123 更新时间:2023-12-01 23:13:55 29 4
gpt4 key购买 nike

我有一个正在循环内调用的任务。该任务只需要一次数据库命中。我希望加快执行速度,因此我创建了一个可运行对象并将其传递给执行器。

public void run () {
for (int i=0,size=5; i<5 ; i++) {
doWork();
}
}
// above is a part of Runnable implementation
ExecutorService service = Executors.newFixedThreadExecutor(5);
service.execute(runnable);
service.shutdown();
// new code follows
for(Map.Entry entry : map.entrySet) {
service.execute( new Runnable() {
public void run() {
doWork(entry); // error : can't have a non-final variable in an inner class
}
});
}
service.shutdown();

我实现了分解工作的目标,但内部类不接受非最终变量。我如何划分工作并传递给执行人?谢谢

最佳答案

你似乎误解了实际发生的事情。使用 5 参数创建执行程序服务不会使其执行您提交 5 次的 Runnable;它仅创建五个可用线程,但您只提交一项工作,该工作本身会执行您的循环。唯一的结果是您在不同的线程中执行工作,而不是并行执行。您的四个线程将处于空闲状态,而第五个线程则运行您提交的单个 Runnable

您想要做的是从可运行程序中删除循环,然后提交工作五次。例如,像这样:

ExecutorService service = Executors.newFixedThreadPool(5);
for(int i = 0; i < 5; i++) {
service.execute(new Runnable() {
public void run() {
doWork();
}
});
}
service.shutdown();

关于java - 如何使 Runnable 的内部类实现与 java 中的 Executor 一起工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21516199/

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