Вам действительно нужно делать это программно изнутри Java (я полагаю, так, учитывая, что ваш вопрос так явно говорит)?
В любом случае, просто не используйте, тогда в Linux вы можете просто сделать это в командной строке:
kill -3 <pid>
EDIT: для программного доступа запустите приложение с включенным JMX, подключитесь к нему через JMX и используйте ThreadMXBean.getThreadInfo , чтобы получить трассировку стека для каждого запущенного потока.
Если у вас есть несколько JVM на одной и той же машине, для каждой из них нужен собственный отдельный порт JMX, вы можете справиться с этим, многократно пытаясь выбрать его из пула, наугад и выйдя из него.
См. здесь для пошагового создания собственного клиента JMX.