【发布时间】:2014-06-21 22:26:52
【问题描述】:
我有一个包含 100 个字符串的列表。对于每个字符串,我需要执行 3 个任务。 所以我介绍了并发线程
Class A implements Runnable
{
String str;
A(String s)
{
str = s;
}
public static void main(String[] args)
{
Runnable runnable = null;
//For Each of my strings
for(String s:MyList)
{
runnable = new A(s);
new Thread(runnable).start();
}
}
@Override
public void run() {
task1();
task2();
task3();
}
}
这会遇到异常。
线程“主”java.lang.OutOfMemoryError 中的异常:超出 GC 开销限制 线程“Thread-0”java.lang.OutOfMemoryError 中的异常:Java 堆空间
如何克服这个问题并限制线程大小?
我试过用这个。
ExecutorService pool = Executors.newFixedThreadPool(10);
pool.execute(runnable);
它不起作用。
【问题讨论】:
-
你是否为每次迭代创建一个新的线程池?
-
您应该返回尝试使您的
ExecutorService版本正常工作。因为这是运行 100 个异步任务的更合理的方式。
标签: java multithreading concurrency