我有一个大量创建线程的应用程序。结果我得到了内存不足错误。我的想法是等到有足够的可用空间来创建下一个Thread。但因此我需要知道创建一个线程需要多少内存以及这个内存量是否可用。有没有办法获取线程所需的内存量?我怎样才能确定这个内存量是否可用?
我已经尝试过的:
for (int i = 0; i < links.size(); i++) {
while(Runtime.getRuntime().maxMemory() - Runtime.getRuntime().totalMemory() +
Runtime.getRuntime().freeMemory() < MEMORY_THRESHOLD) {
synchronized (lock) {
lock.wait(10);
}
}
Thread t = new Thread(new Task(links.get(i)));
t.setDaemon(true);
t.start();
}
但即使我使用 100MB 作为阈值,我也会得到一个内存不足错误.
不,你去删除这个代码并使用ThreadPool
反而。您想要做的事情非常困难,您应该使用更高的抽象来执行多线程,否则您根本不执行它。
查看 http://java.dzone.com/articles/java-concurrency-%E2%80%93-part-7执行者,目前他们是更高的抽象。
如果您的任务受计算限制,那么ForkJoin
Java 7 中的问题是你的朋友,只要你知道如何递归地将问题划分为子问题,你就不需要担心池的大小。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)