我有一个类名为:ReceiptGenerateAgentDAO receiptGenerateAgentDAO = new ReceiptGenerateAgentDAO();这个类将从jsp 页面中调用,该页面有一个方法,并且我有一个for循环,它将执行多于5分钟并且问题是我请求jsp到 调用类并且类开始执行,现在我重新加载jsp 并再次调用该类,现在这两个类都在运行,它不是 线程,它如何可能以及如何解决它?如何避免类java的同一个实例正在运行多次
for (String Key : list) {
if (!"userDetailsCache".equals(Key)) {
preparedStatement2.setString(1, Key);
@Cleanup
ResultSet rsCreditReceipt = preparedStatement2.executeQuery();
if (rsCreditReceipt.next()
&& rsCreditReceipt.getString("SUMMARY_DATE") != null) {
String exBalance = rsCreditReceipt.getString("balance");
/** Agent Current Balance */
preparedStatement3.setString(1,
rsCreditReceipt.getString("SUMMARY_DATE"));
preparedStatement3.setString(2, Key);
@Cleanup
ResultSet rsCreditBal = preparedStatement3.executeQuery();
double creditDebit = Double.parseDouble(exBalance);
if (rsCreditBal.next()) {
if (rsCreditBal.getString("creditdebit") != null) {
creditDebit += Double.parseDouble(rsCreditBal
.getString("creditdebit"));
}
}
if (creditDebit < 0) {
Element element = EhcacheManager.getUserDetailsCache()
.get(Key);
UserDetails details = (UserDetails) element
.getObjectValue();
/** Agent Opening Balance */
getZoneDetails(details, connection);
receiptGenerateTempDTOs.add(new ReceiptGenerateTempDTO(
details.getTerritoryId(), details
.getSatelliteId(), details.getZoneId(),
rsCreditReceipt.getString(3),
NumericConstants.ZERO, String.valueOf(formatter
.format((creditDebit * (-1)))), time,
receiptGenerateAgentDTO.getSelectedUserId(),
NumericConstants.ZERO));
}
} else {
/** If no opening balance,only current Balance */
preparedStatement4.setString(1, Key);
@Cleanup
ResultSet rsCreditBal = preparedStatement4.executeQuery();
if (rsCreditBal.next()) {
Element element = EhcacheManager.getUserDetailsCache()
.get(Key);
UserDetails details = (UserDetails) element
.getObjectValue();
getZoneDetails(details, connection);
receiptGenerateTempDTOs
.add(new ReceiptGenerateTempDTO(
details.getTerritoryId(),
details.getSatelliteId(),
details.getZoneId(),
details.getUserId(),
NumericConstants.ZERO,
String.valueOf(formatter.format((Double.parseDouble(rsCreditBal
.getString("creditdebit")) * (-1)))),
time, receiptGenerateAgentDTO
.getSelectedUserId(),
NumericConstants.ZERO));
}
}
}
System.out.println(i++);
}
所以你需要把它作为'Singleton'类来避免多次实例化它。 –
你能告诉我们一些代码吗? – Keerthivasan
我用代码 – sanjaykumar