我正在使用Strust2和Hibernate。我必須找出貨幣匯率(美元兌INR)。我需要在多個地方使用這些信息。爲此,我正在使用ThreadLocal來達到此目的。如何使用ThreadLocal存儲數據
public class GetExchangeRate{
private ThreadLocal<Double> threadLocalRate = new ThreadLocal<Double>();
public double getCurrencyRate(UserDet userDet){
LOG.info("Thread id is ---------------->"+Thread.currentThread().getId());
Double currencyRate = (Double) threadLocalRate.get();
if(currencyRate == null){
LOG.info("Object does not exist");
---//my code which is used to find USD --> INR exchange rate
threadLocalRate.set(currencyRate);
}
return currencyRate ;
}
}
我需要從不同的方法調用上述方法。當我從不同的方法調用上述方法時,上面的總代碼正在執行。 我的要求是隻有一次總方法必須執行。並且剩餘三次總方法不應執行。應該返回存儲在ThreadLocal對象中的值。
這是我的日誌報告,它顯示了上面執行的總方法。
[ INFO] 2012-09-20 10:20:04,611 [CommonFormats] (CommonFormats.java:getCurrencyRate:159)
Thread id is ---------------------------->54
[ INFO] 2012-09-20 10:20:04,611 [CommonFormats] (CommonFormats.java:getCurrencyRate:163)
Object does not exist
[ INFO] 2012-09-20 10:20:49,529 [CommonFormats] (CommonFormats.java:getCurrencyRate:159)
Thread id is ---------------------------->54
[ INFO] 2012-09-20 10:20:49,529 [CommonFormats] (CommonFormats.java:getCurrencyRate:163)
Object does not exist
請指出我在做什麼錯。上述方法將從四個方法調用。 兩種方法屬於Action類,兩種方法屬於服務層類。
我的示例代碼
//Action class
public class StrutsAction1{
public String method1(){
// my code
CommonFormats commonFormats= new CommonFormats();
System.out.println(commonFormats.getCurrencyRate());
// my code
}
public String method2(){
// my code
CommonFormats commonFormats= new CommonFormats();
System.out.println(commonFormats.getCurrencyRate());
// my code
} }
//Business class
public class BussinessLogic{
public String method1(){
// my code
CommonFormats commonFormats= new CommonFormats();
System.out.println(commonFormats.getCurrencyRate());
// my code
}
public String method2(){
// my code
CommonFormats commonFormats= new CommonFormats();
System.out.println(commonFormats.getCurrencyRate());
// my code
} }
在上面的611和529中指出了上述呼叫的線路號碼(呼叫者線路號碼)。 – Daya
您的要求不明確。 –
@DaveNewton我需要threadLocalRate變量多個方法(近4種方法)。它將有匯率(美元 - >印度盧比)。用於查明匯率的代碼應只執行一次。剩餘3次它不應該得到執行。所以我在這裏使用了ThreadLocale概念。但它不工作。我更新了這個問題。 – Daya