我有很多计算要做。所有都可以并行...如果没有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就会被填满。
我做错了吗?
答案 0 :(得分:3)
请不要尝试创建自己的Thread-List。使用现有的方法和常用方法。
一种正确的方法是使用ThreadPoolExecutor。检查一下。 MultiThreading Vs ThreadPoolExecutor
您还应该使用Executor,它允许您限制并行/最大使用的线程数。 示例:
ExecutorService executor = Executors.newFixedThreadPool(10);
executor.submit(yourfirstthread);
executor.submit(secondthread);
// and so on..