1
class A {
static Map<String,ColA> mapA;
static const int a = 12;
static Map<String,colB> mapB;
}

Q1> 现在我需要每 10 分钟从数据库更新一次地图。可以有多个线程可以访问 mapA。因此,如果我在其中一个线程中使用同步更新,那么在更新进行时线程可能会中断的任何实例。如果是这样如何解决这个问题?

Q2> 我也有不同的班级成员。其中一些是常量,其中一些是从内存中加载的。然而,它们都有一个共同的属性。对于所有实例(静态),它们总是相同的。那么将所有东西都放在一个类中是否有意义,或者我们应该有两个单独的类?

谢谢

4

2 回答 2

3

现在我需要每 10 分钟从数据库中更新一次地图。可以有多个线程可以访问mapA。因此,如果我使用同步化的线程在其中一个线程中进行更新,那么当更新进行时,线程可能会中断的任何实例。如果是这样如何解决这个问题?

这听起来像是值得使用的地方AtomicReference。从数据库中获取数据,将其放入地图中,然后以原子方式将其与“旧”地图交换。这样,任何客户端代码都可以获取地图并知道它实际上是一个快照,在它们之下不会改变。

我也有不同的班级成员。其中有些是常量,有些是从内存中加载的。然而,它们都有一个共同的属性。对于所有实例(静态),它们总是相同的。那么将所有东西都放在一个班级中是否有意义,或者我们应该有两个单独的班级。

这是一个相当模糊的描述。您指定的所有属性(有些是常量,有些是从内存中加载的,都具有一个公共属性,都是静态的)与它们是否应该在同一个类中没有任何关系。

于 2012-06-25T16:28:59.863 回答
0

1. If synchronization is used on the group of statement or the method which is responsible 对于改变 MapA 的关键状态,我认为不会有问题。

2. I am not getting a clear understanding of your 2nd question, but still you can divide them in to classes using cohesive principle.

内聚类意味着,具有反映其名称的方法的类。

例如:

 `class Animal with methods like Sound, Movements, etc...`
于 2012-06-25T16:35:10.007 回答