控制并行线程的数量

时间:2014-06-19 23:38:12

标签: java multithreading

我有很多计算要做。所有都可以并行...如果没有RAM的限制。 :/

因为我想控制并行工作的线程数。

我写了以下代码:

List<Thread> threadList = new ArrayList<Thread>();              
threadList.add(new Thread(new Runnable() {              
  @Override
  public void run() {
    ....
  }
}));            
threadList.get(threadList.size()-1).start();            
if(threadList.size() >= 5){                 
  threadList.remove(0).join();                  
}

使用1这样可以正常工作,就像没有多线程一样。但是,如果我允许2它真的很疯狂,RAM就会被填满。

我做错了吗?

1 个答案:

答案 0 :(得分:3)

请不要尝试创建自己的Thread-List。使用现有的方法和常用方法。

一种正确的方法是使用ThreadPoolExecutor。检查一下。 MultiThreading Vs ThreadPoolExecutor

您还应该使用Executor,它允许您限制并行/最大使用的线程数。 示例:

ExecutorService executor = Executors.newFixedThreadPool(10); 
executor.submit(yourfirstthread);
executor.submit(secondthread);
// and so on..