Ответ
Каждый поток (Thread) в Java имеет свой собственный стек. Следовательно, количество стеков равно количеству активных потоков в приложении.
Источники потоков (и стеков):
- Главный поток (
main). - Потоки, явно созданные через
new Thread()или пулы (ExecutorService). - Системные потоки (например, GC, Finalizer).
Пример:
public class StackCountExample {
public static void main(String[] args) {
// Главный поток (1 стек)
Runnable task = () -> System.out.println(Thread.currentThread().getName());
Thread t1 = new Thread(task); // Поток t1 (2-й стек)
Thread t2 = new Thread(task); // Поток t2 (3-й стек)
t1.start();
t2.start();
// Всего 3 стека
}
}
Ограничения: Максимальное количество потоков (и стеков) ограничено:
- Размером стека на поток: Задаётся параметром JVM
-Xss(например,-Xss1m). - Доступной оперативной памятью.
- Ограничениями ОС (например,
ulimit -uв Linux). При превышении лимита возникает ошибкаOutOfMemoryError: unable to create new native thread.