托管实例的同步

时间:2012-09-26 11:21:31

标签: multithreading design-patterns asynchronous synchronization

我想实现一种multiton类(可能也称为Manager Design Pattern),它根据用户配置加载(和管理)对象(多重中每个对象的键是配置记录的主键)。如果检测到配置发生变化,则处理并重新创建(即重新加载)这些对象。

其他对象(托管对象外部)与这些“托管”对象进行交互/通信。

  

E.g。
  ManagerA管理已配置的ClassA实例的实例。   ObjectB通过ManagerA检索ClassA的实例并启动   与实例进行交互。

问题是ObjectB和ClassA的托管实例之间的交互可能在另一个线程上,而不是ManagerA处理ClassA实例并创建ClassA的新实例(对于新的更改配置)。即托管实例可以与托管对象交互时(或之前)进行处理。

我的问题是如何通过外部对象同步实例管理和与这些托管实例的交互?

1 个答案:

答案 0 :(得分:0)

如果没有代码,伪代码或提供的代码,这非常困难,但是......

如果客户端通过排队操作与托管协议对象进行交互,并且该操作队列的管理协议对象寿命较长,那么最好从托管协议中分离该队列并将引用传递给类似队列的客户端对象。

当某些东西入队时,让你的队列式对象检查一个正确配置的协议对象并使用它。我假设它在使用时(意味着字节在线上飞行),它无法更改/配置。在完成一个操作之后,让类似队列的对象然后将协议对象重新检入您的经理。签入后,如果管理员检测到配置发生了变化,它可以处理并重新创建协议对象,如果没有,那么它仍然准备好下一次使用。如果在检测到配置更改时,当前未检出对象,则可以立即执行该重新创建步骤。

客户端屏蔽这些细节,因为它永远不会直接访问协议对象。 (虽然如果这是一个要求,那么您仍然可以对协议对象应用签入和签出概念以确保它们是最新的,但是由于客户端忘记执行签入,因此更难执行并重新结账)。

相关问题