java - 从外部类创建 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();
}
});
}
解决方案
当线程仍在运行时列表更改时,您将遇到问题。这不会发生在您显示的代码中,因此对于这一点您应该没问题;例如,如果您在构造函数中创建列表并且从不更改它。
sem
变量 use 看起来很狡猾。您释放但从未获得它(假设它是一个信号量)。
推荐阅读
- ajax - 使用 ASP.NET mvc 在视图中分页数据而不重复 sql 查询
- arrays - 尝试更改使用迭代创建的数组中的单个值会更改多个值。为什么?
- excel - 识别 vba 列表中的文本变量
- unicode - 日文和中文名字/姓氏检测器
- java - 为多个模型 tensorflow java 的作业指定 CPU 或 GPU
- dm-script - 在 DigitalMicrograph GMS3 中添加/应用自定义数据栏到图像
- sql - 可以从同一个表中搜索部分匹配的字符串吗?
- php - 匹配字符串后面没有另一个字符串
- tensorflow - Keras 中的自注意力 GAN
- php - php-mysqli 等待“multi_query”查询完成?