У меня есть метод, который создает N потоков (например, 50 потоков).Эти созданные темы создают новые темы с Executors.newFixedThreadPool(20)
.Так что 50 * 20 = 1000
или чуть больше, возможно, созданных потоков во время работы приложения.Но в реальной ситуации количество потоков может быть более 10000 и более!Как это исправить?Что я делаю не так?
Вот часть кода, которая создает потоки и добавляет их в список Future: <pre>
while(taskCount != 0 || futureSize > 0)
{
if(taskCount > 0)
{
for(int i = 0; i < taskCount; i++)
{
if(i % 100 == 0)
{
checkAlive(taskId);</p>
<pre><code> date = new Date();
System.gc();
}
}
catch(Exception ex)
{
ex.printStackTrace();
}
future.add(exec.submit(new Task());
try
{
Thread.sleep(200);
}
catch(InterruptedException ex)
{
ex.printStackTrace();
}
}
}
Возможно, это произошло из-за использования Future?Или почему?Почему количество потоков вышло из-под контроля?Из-за этого у меня есть исключения из нехватки памяти, и число потоков кажется неограниченным.И если потоки ждут в пуле, почему для этого каждого потока выделяется столько памяти, насколько я знаю, ожидающие потоки в пуле не используют столько памяти.
Вот экраны до и после: ![before](https://i.stack.imgur.com/TAmXb.png)
![after](https://i.stack.imgur.com/bN727.png)