首先看代码:/**
 * 这个对象存储了在线的终端的信息。这个对象是线程安全的 ,你可以在多线程中使用它。
 * 向这个对象中添加或者是移除在线终端的信息,将会直接影响到数据库中存储的终端在线状态。当然,也会最终影响到作业监管平台上面的终端在线情况监控。<br>
 * 需要注意的是:如果你要在循环的过程中调用这个对象的remove方法,那么调用之后应该立即退出循环,否则将会引发{@linkplain java.util.
 * ConcurrentModificationException}。
 * 引起这个异常的原因是由于集合内部的计数器不一致导致的,详细的关于这个问题的介绍请参见联机帮助。
 * 
 * @author LuJun
 * @version 2011-04-07
 */
public class ActiveTerminalPool {
private static final Map<String, TerminalInfo> terminals = new HashMap<String, TerminalInfo>(); private ActiveTerminalPool() {
} /**
 * 向在线终端集合中添加一个终端信息
 * 
 * @param info
 */
public static synchronized void add(TerminalInfo info) {
terminals.put(info.getTerminalId(), info);
} /**
 * 通过终端编号获取一个在线的终端的信息,如果这个终端不在线,那么将会返回null
 * 
 * @param terminalId
 *            - 终端的编号
 */
public static synchronized TerminalInfo get(String terminalId) {
return terminals.get(terminalId);
} /**
 * 获得所有的在线的终端的信息
 * 
 * @return
 */
public static synchronized Collection<TerminalInfo> getActiveTerminalInfos() {
return terminals.values();
} /**
 * 从在线终端集合中移除一个终端信息
 * 
 * @param terminalId
 *            - 要移除的终端的编号
 */
public static synchronized void remove(String terminalId) {
// // 使用Iterator对象可以避免java.util.ConcurrentModificationException
// for (Iterator<TerminalInfo> it = terminals.values().iterator(); it
// .hasNext();) {
// TerminalInfo info = it.next();
// if (info.getTerminalId().equals(terminalId)) {
// it.remove();
// break;
// }
// } terminals.remove(terminalId);
} /**
 * 设置最后一次在线检测的时间
 * 
 * @param terminalId
 *            - 要设置的终端的编号
 * @param lastOnLineCheckTime
 *            - 要设置的最后一次检测的时间
 */
public static synchronized void setLastOnLineCheckTime(String terminalId,
long lastOnLineCheckTime) {
terminals.get(terminalId).setLastOnLineCheckTime(lastOnLineCheckTime);
} /**
 * 获得最后一次在线检测的时间
 * 
 * @param terminalId
 *            - 终端的编号
 * @return 最后一次检测的时间
 */
public static synchronized long getLastOnLineCheckTime(String terminalId) {
return terminals.get(terminalId).getLastOnLineCheckTime();
}
}
terminals 对象应该是在类加载的时候就已经创建好了,但是我的应用程序仍然会在有的时候(并不频繁)报出terminals 对象为空的异常。感觉就像是terminals 被回收了
哪位高手能给点解释?