jstack is platform dependent and it is not available on all platforms. Therefore jstack may not be useful under all situations.
It is not possible to create full JVM thread dump from within JVM. You may call JVM_dumpAllStacks function on JVM DLL to create thread dump. It depends on whether that route is acceptable for you because it involves JNI and some native coding. Look at Open JDK Bug list for some more information and knowing efforts to get this functionality from java management APIs. Other JVMs may also follow this route in future. In that case you will be able to invoke JVM thread dump through management API.
At this time only option you may have (when you don't want to take JNI route) is creating thread dumps using good old methods like this: Creating a Thread Dump