Стек состоит из вызовов методов. То, что java помещает в стек, - это запись вызова метода, которая инкапсулирует все переменные (как параметры, так и локально созданные экземпляры переменных) для этого метода. Когда вы запускаете приложение Java, единственный метод в стеке - главный метод (который автоматически включает параметр args):
main(args)
Когда говорят, что вы создаете объект Foo и вызываете foo.method (), стек теперь выглядит так:
method()
main(args)
Когда методы вызываются, они помещаются в стек, а когда они возвращаются, они удаляются или «выталкиваются» из стека. Поскольку переменные объявляются и используются, запись стека, соответствующая текущему методу (в верхней части стека), увеличивается с учетом размера переменной.
Для вашего примера с потоками каждый поток будет иметь свой собственный стек, который существует независимо от стека каждого другого потока.