Why is TimeZone.getTimeZone(id) synchronized, and why this isn't documented?
<p><a href="http://download.oracle.com/javase/6/docs/api/java/util/TimeZone.html#getTimeZone%28java.lang.String%29" rel="nofollow"><code>java.util.TimeZone.getTimeZone(id)</code></a> is a method to obtain a timezone based on an id. While I was using the class I opened it with a decompiler and noticed that it is <code>synchronized</code>. And since it is <code>static</code>, this means that no two threads can invoke the method at the same time. This could be very painful if multiple threads (in a web application for example) are often getting timezones. Why does it have to be synchronized?</p>

<p>Then I realized that the documentation doesn't say anything about synchronization. So, my decompiler could be wrong. Then I opened <a href="http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/TimeZone.java" rel="nofollow">the source</a>, and it is synchronized. Why this is not documented? I'm aware that javadoc doesn't include the <code>synchronized</code> keyword, but it could have been mentioned.</p>

<p>The solution, of course, is to use joda-time <code>DateTimeZone</code></p>
