首页 > 解决方案 > 从外部类创建 Runnable

问题描述

我正在尝试创建几个任务,每个任务都会在几个路由器上调用路由。我正在尝试将路由器的主列表(ArrayList)分解为每个线程可以迭代的子列表。

这种将变量传递给线程的方式会导致问题吗?或者是别的什么。

nbTasks= Runnables
routersPerThread的数量 = 每个线程应该调用 route() 的路由器数量

for (int i = 0; i < nbTasks; i++) {
    final List<Router> routerList = 
            routers.subList(i * routersPerThread, (i + 1) * routersPerThread);

    service.execute(new Runnable() {
        @Override
        public void run() {
            for (Router r : routerList) {
                r.route();
            }
            sem.release();
        }
    });
}

标签: javarunnable

解决方案


当线程仍在运行时列表更改时,您将遇到问题。这不会发生在您显示的代码中,因此对于这一点您应该没问题;例如,如果您在构造函数中创建列表并且从不更改它。

sem变量 use 看起来很狡猾。您释放但从未获得它(假设它是一个信号量)。


推荐阅读