【问题标题】:Limiting Threads and/or reusing threads for iterator?限制线程和/或重复使用迭代器的线程?
【发布时间】:2012-02-03 19:22:15
【问题描述】:

假设我有一个迭代器它返回一些类 CustomClass 的东西。迭代器有“许多”CustomClass 可以遍历。此外,假设用户输入的内容使我的程序决定我的程序在任何时候只能运行 5 个线程。

在某种程度上,预计会发生这样的事情:

for(int i = 0; i < 5 && it.hasNext(); i++) {
  new Thread(it.next()).start();
}

现在,再次只允许五个,并且迭代器中有更多元素。但是在一个线程完成其 run() 之后,我希望它调用 it.next() 并创建一个新线程。但问题是它没有在这个线程中定义。 CustomClass 甚至没有任何种类的 next() 方法。我该如何解决这个问题,以便每个线程都可以有效地“访问”迭代器?

【问题讨论】:

  • 如果你不想同时做多件事情,不要使用线程。
  • 不是我不想同时做多件事情,而是我想做但是有限制。例如,假设迭代器中的对象运行一个加载 URL 的方法,并从该 URL 加载图像以对其进行处理。鉴于有些人(如果不是很多)的连接较弱,他们可能希望一次只同时加载 5 个页面+图像,而不是 20 个以上,以便能够在不受干扰的情况下仍然观看 YouTube 上的视频。跨度>

标签: java multithreading iterator


【解决方案1】:

查看 Java 教程中的 executors and thread pools 部分。基本思想是将您的工作排队,当一个线程“变得可用”时,它将拿起下一个工作并开始执行它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-31
    • 1970-01-01
    相关资源
    最近更新 更多