It varies with the JVM implementation and OS, but when coding you should take a defensive position and assume that multiple threads will be active at the same time.
Pragmactically, you will see good use of multiple cores on many major platforms. There's quite a bit of cleverness in commerical JVMs now to do garbage collection so as to reduce the impact of that on muti-core platforms.