1

我正在尝试实现由 RMI 管理的 ID 锁定系统。基本上,当客户端输入一个 ID 时,它会将该 ID 连同客户端 ID 和一个循环计数器一起发送到 RMI 服务器,RMI 服务器将它存储在一个列表中。

服务器将在 30 秒后递增所有循环计数器。除非客户端发送 Unlock 消息,否则客户端将发送 Heartbeat,这会将循环计数器更新回 0。如果循环计数器 >= 3,则服务器将假定客户端已不正确地断开连接并释放锁定身份证。

我一直在网上研究,我发现了很多非常具体的方法,但太多的方法看起来太模糊了,或者对一个项目的需求来说太具体了。我想我对如何做到这一点有一个大致的了解,但我想把事情弄清楚:

1 -大多数实现都会在单独线程上的无限循环中发生这种“循环更新”逻辑。它是否正确?看起来我的 RMI 服务器的 Main 类几乎没有发生什么,也许我可以在那里实现循环。

2 -如果线程确实是正确的方法,我什么时候启动线程?有什么特殊的方法需要完成吗?我在网上查看过,发现很多网站都说要使用线程,但没有一个网站展示了它们在哪里执行线程的好例子。

感谢您的任何帮助,您可以提供。我对 RMI 还很熟悉,所以我感谢你的耐心。

4

1 回答 1

2

我认为,您的问题是如何每 30 分钟增加一次循环计数器,而不是关于 RMI。

如果是这样,您可以使用 ScheduledExecutorService。

下面有一个伪代码。

public class IdLockMgr {
  private Map<String, Integer> idToCycleMap = new HashMap<>();
  private ScheduledExecutorService service;
  public IdLockMgr() {
     service = Executors.newScheduledThreadPool(1);
     //BAD
((ScheduledThreadPoolExecutor)service).setExecuteExistingDelayedTasksAfterShutdownPolicy(false);
     service.scheduleAtFixedRate(...);//this is point.
  }
  public void lockId(String id) {
    idToCycleMap.put(id, 0);
  }
  public void shutdown() {
     service.shutdown();
  }
}
于 2013-12-16T20:08:05.047 回答