TimeZone.setDefault изменяется в JDK6

Я просто заметил, что JDK 6 имеет другой подход к установке TimeZone по умолчанию, чем JDK5.

Ранее новое значение по умолчанию было бы сохранено в локальной переменной потока. С JDK6 (я просто рассмотрел 1.6.0.18) изменилась реализация, так, чтобы, если пользователь может записать в "user.timezone" свойство, или если нет никакого установленного SecurityManager, часовой пояс изменяет VM-wide! Иначе локальное для потока изменение происходит.

Я неправильно? Это, кажется, настоящее радикальное изменение, и я ничего не мог найти в сети об этом.

Вот код JDK6:

 private static boolean hasPermission() {
  boolean hasPermission = true;
  SecurityManager sm = System.getSecurityManager();
  if (sm != null) {
   try {
    sm.checkPermission(new PropertyPermission("user.timezone", "write"));
   } catch (SecurityException e) {
    hasPermission = false;
   }
  }
  return hasPermission;
 }

 /**
  * Sets the <code>TimeZone</code> that is
  * returned by the <code>getDefault</code> method.  If <code>zone</code>
  * is null, reset the default to the value it had originally when the
  * VM first started.
  * @param zone the new default time zone
  * @see #getDefault
  */
 public static void setDefault(TimeZone zone)
 {
  if (hasPermission()) {
   synchronized (TimeZone.class) {
    defaultTimeZone = zone;
    defaultZoneTL.set(null);
   }
  } else {
   defaultZoneTL.set(zone);
  }
 }

в то время как прежде (в JDK5) это было просто:

 /**
  * Sets the <code>TimeZone</code> that is
  * returned by the <code>getDefault</code> method.  If <code>zone</code>
  * is null, reset the default to the value it had originally when the
  * VM first started.
  * @param zone the new default time zone
  * @see #getDefault
  */
 public static synchronized void setDefault(TimeZone zone)
 {
  defaultZoneTL.set(zone);
 }
17
задан BalusC 1 February 2010 в 13:04
поделиться

3 ответа

Поиск базы данных ошибок был на самом деле Довольно хорошая идея :)

http://bugs.sun.com/view_bug.do?bug_id=6352812

, а также (реки):

http://bugs.sun.com/view_bug .DO? BUG_ID = 6181786

Сводка: JDK 1.5 было исключением из правила, причем JDK 1.6 вещей вернулись к «нормальному», что, согласно документам, состоит в том, что изменение часового пояса - это виртуальное изменение.

13
ответ дан 30 November 2019 в 14:00
поделиться

Документация API для timezone.getdefault () утверждает, что «источник часового пояса по умолчанию может варьироваться в зависимости от реализации». Если ваш код полагается на конкретное поведение стандартных классов API стандартных API (в этом случае, чтобы часовой пояс по умолчанию хранится на потоке локальный уровень), вы должны ожидать, что ваш код не удается с новыми версиями VM или с VMS из разных версий поставщики.

1
ответ дан 30 November 2019 в 14:00
поделиться

Это было, вероятно, сделано, чтобы исправить ошибку. Я ищу bugs.sun.com , чтобы найти обоснование для него. (Подсказки могут быть найдены в замечаниях .)

4
ответ дан 30 November 2019 в 14:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: