Как хранить данные с помощью ThreadLocal ⇐ JAVA
-
Anonymous
Как хранить данные с помощью ThreadLocal
Я работаю с Strust2 и Hibernate. Мне нужно узнать курс обмена валюты (USD к INR). Мне нужно использовать эту информацию более чем в одном месте. Для этой цели я использую ThreadLocal.
публичный класс GetExchangeRate{ частный ThreadLocal threadLocalRate = новый ThreadLocal(); общественный двойной getCurrencyRate (UserDet userDet) { LOG.info("Идентификатор потока ---------------->"+Thread.currentThread().getId()); Двойная валютная ставка = (Double) threadLocalRate.get(); если (currencyRate == ноль) { LOG.info("Объект не существует"); ---//мой код, который используется для определения курса доллара США --> обменный курс INR threadLocalRate.set(currencyRate); } вернуть валютную ставку; } } Мне нужно вызвать указанный выше метод из четырех разных методов. Когда я вызываю вышеуказанный метод из разных методов, весь приведенный выше код выполняется. Мое требование - только один раз, чтобы весь метод был выполнен. И оставшиеся три раза общий метод не должен выполняться. Должно быть возвращено значение, хранящееся в объекте ThreadLocal.
Вот мой отчет журнала, в котором показано, что указанный выше общий метод выполнен.
[ ИНФОРМАЦИЯ] 20.09.2012 10:20:04,611 [CommonFormats] (CommonFormats.java:getCurrencyRate:159) Идентификатор темы ---------------------------->54 [ИНФОРМАЦИЯ] 20.09.2012 10:20:04,611 [CommonFormats] (CommonFormats.java:getCurrencyRate:163) Объект не существует [ИНФО] 2012-09-20 10:20:49,529 [CommonFormats] (CommonFormats.java:getCurrencyRate:159) Идентификатор темы ---------------------------->54 [ИНФОРМАЦИЯ] 20.09.2012 10:20:49,529 [CommonFormats] (CommonFormats.java:getCurrencyRate:163) Объект не существует Пожалуйста, подскажите, что я делаю не так. Вышеуказанный метод будет вызываться из четырех методов. Два метода принадлежат классу Action, а Два метода принадлежат классу уровня обслуживания.
Мой пример кода
//Класс действия публичный класс StrutsAction1{ публичный строковый метод1(){ // мой код CommonFormats commonFormats = новый CommonFormats(); System.out.println(commonFormats.getCurrencyRate()); // мой код } публичный строковый метод2(){ // мой код CommonFormats commonFormats = новый CommonFormats(); System.out.println(commonFormats.getCurrencyRate()); // мой код } } //Бизнес-класс общественный класс BussinessLogic{ публичный строковый метод1(){ // мой код CommonFormats commonFormats = новый CommonFormats(); System.out.println(commonFormats.getCurrencyRate()); // мой код } публичный строковый метод2(){ // мой код CommonFormats commonFormats = новый CommonFormats(); System.out.println(commonFormats.getCurrencyRate()); // мой код } }
Я работаю с Strust2 и Hibernate. Мне нужно узнать курс обмена валюты (USD к INR). Мне нужно использовать эту информацию более чем в одном месте. Для этой цели я использую ThreadLocal.
публичный класс GetExchangeRate{ частный ThreadLocal threadLocalRate = новый ThreadLocal(); общественный двойной getCurrencyRate (UserDet userDet) { LOG.info("Идентификатор потока ---------------->"+Thread.currentThread().getId()); Двойная валютная ставка = (Double) threadLocalRate.get(); если (currencyRate == ноль) { LOG.info("Объект не существует"); ---//мой код, который используется для определения курса доллара США --> обменный курс INR threadLocalRate.set(currencyRate); } вернуть валютную ставку; } } Мне нужно вызвать указанный выше метод из четырех разных методов. Когда я вызываю вышеуказанный метод из разных методов, весь приведенный выше код выполняется. Мое требование - только один раз, чтобы весь метод был выполнен. И оставшиеся три раза общий метод не должен выполняться. Должно быть возвращено значение, хранящееся в объекте ThreadLocal.
Вот мой отчет журнала, в котором показано, что указанный выше общий метод выполнен.
[ ИНФОРМАЦИЯ] 20.09.2012 10:20:04,611 [CommonFormats] (CommonFormats.java:getCurrencyRate:159) Идентификатор темы ---------------------------->54 [ИНФОРМАЦИЯ] 20.09.2012 10:20:04,611 [CommonFormats] (CommonFormats.java:getCurrencyRate:163) Объект не существует [ИНФО] 2012-09-20 10:20:49,529 [CommonFormats] (CommonFormats.java:getCurrencyRate:159) Идентификатор темы ---------------------------->54 [ИНФОРМАЦИЯ] 20.09.2012 10:20:49,529 [CommonFormats] (CommonFormats.java:getCurrencyRate:163) Объект не существует Пожалуйста, подскажите, что я делаю не так. Вышеуказанный метод будет вызываться из четырех методов. Два метода принадлежат классу Action, а Два метода принадлежат классу уровня обслуживания.
Мой пример кода
//Класс действия публичный класс StrutsAction1{ публичный строковый метод1(){ // мой код CommonFormats commonFormats = новый CommonFormats(); System.out.println(commonFormats.getCurrencyRate()); // мой код } публичный строковый метод2(){ // мой код CommonFormats commonFormats = новый CommonFormats(); System.out.println(commonFormats.getCurrencyRate()); // мой код } } //Бизнес-класс общественный класс BussinessLogic{ публичный строковый метод1(){ // мой код CommonFormats commonFormats = новый CommonFormats(); System.out.println(commonFormats.getCurrencyRate()); // мой код } публичный строковый метод2(){ // мой код CommonFormats commonFormats = новый CommonFormats(); System.out.println(commonFormats.getCurrencyRate()); // мой код } }
Мобильная версия