2010-08-22 3 views
4

Вместо того, чтобы записывать следующий безопасный метод, не связанный с потоком.Мне нужно вызвать ThreadLocal.remove в следующем случае

private static final Calendar calendar = Calendar.getInstance(); 
public void fun() { 
    // Going to call mutable methods in calendar. 
} 

изменить его к потокобезопасная версии.

public void fun() { 
    final Calendar calendar = Calendar.getInstance(); 
    // Going to call mutable methods in calendar. 
} 

Вместо того чтобы создавать новый экземпляр каждый раз, даже для одной и той же темы, я сделал улучшение по

public void fun() { 
    final Calendar calendar = getCalendar(); 
    // Going to call mutable methods in calendar. 
} 

/** 
* Returns thread safe calendar. 
* @return thread safe calendar 
*/ 
public Calendar getCalendar() { 
    return calendar.get(); 
} 

private static final ThreadLocal <Calendar> calendar = new ThreadLocal <Calendar>() { 
    @Override protected Calendar initialValue() { 
     return Calendar.getInstance(); 
    } 
}; 

Для моего 3-го подхода, есть ли необходимость позвонить ThreadLocal.remove?

ответ

5

Если ваше единственное намерение состоит в том, чтобы сделать это threadsafe, тогда действительно не нужно это делать. Но когда потоки поддерживаются threadpool, и ваше намерение состоит в том, чтобы дать каждому свежевыпущенному потоку из threadpool свое собственное начальное значение, тогда вы должны это сделать.

2

Как @BalusC говорит, это зависит от того, что вас беспокоит.

У меня есть подозрение, что ваша утилизация объектов Calendar с использованием локальной локальной сети может стоить больше, чем вы экономите, не звоните Calendar.getInstance(). У этого есть запах преждевременной микро-оптимизации.

+0

Но, Джошуа Блох даже предлагает использовать ThreadLocal для примера SimpleDateFormat. (Я планирую использовать для Calendar, SimpleDateFormat и NumberFormat) - http://old.nabble.com/Threadlocals-and-memory-leaks-in-J2EE-td13097957.html#a13097957 –

+0

Но ничего! Правило №1 оптимизации - сначала укажите ваше приложение. –

+0

@ Ян Чэн «Календарь» должен быть довольно дешевым объектом для построения. –

Смежные вопросы