In my experience, if you are looking at the Java kernel and not at J2EE, the only time I can think that threads are created in main Java is Swing.
I have not seen a single example of other threads created by the main Java APIs, except for the Thread class, of course. :)
But, if you use other libraries, maybe they create streams, but if you do not want to profile, you can use AspectJ to register whenever a new stream is created, and the stack track what is called, so you can see what creates streams.
UPDATE:
Swing uses 4 threads, according to this post, but it also explains how you can start killing threads if necessary.
http://www.herongyang.com/Swing/jframe_2.html
source share