Agreed. The JVM does an decent job, and C# has some pretty nice syntactic conveniences.
I ran a string whacking benchmark (posted on my website, roboprogs.com: "... faster ..." page), and, for a sequential task, Perl cleaned up handily. However, for the commonly available languages on *nix, Java outshone everything else for dealing with threads. Keep in mind this was a naive use of threads as well: fire up for a single task, rather than having a thread pool that looped over requests from a queue. Java still did a good job managing it.
(though I do wish Java had more alternatives for quick and dirty coding at times - weakly typed options, delegate/function pointer type stuff -- still need to look more into jRuby, Scala, Groovy, et al)