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

Q1>データベースからマップを10分ごとに更新する必要があります。mapAにアクセスできる複数のスレッドが存在する可能性があります。したがって、同期を使用してスレッドの1つで更新すると、更新の進行中にスレッドが中断する可能性があります。もしそうなら、この問題を解決する方法は??

Q2>また、クラスのメンバーが異なります。それらのいくつかは定数であり、それらのいくつかはメモリからロードされます。ただし、それらすべてに1つの共通のプロパティがあります。それらはすべてのインスタンスで常に同じです(静的)。では、すべてを1つのクラスに含めることは理にかなっていますか、それとも2つの別々のクラスを含める必要がありますか?

ありがとう

4

2 に答える 2

3

ここで、データベースから10分ごとにマップを更新する必要があります。mapAにアクセスできる複数のスレッドが存在する可能性があります。したがって、synchonizedを使用してスレッドの1つを更新すると、更新が行われているときにスレッドが中断する可能性があります。もしそうなら、この問題を解決する方法は??

これは、使用する価値のある場所のように聞こえAtomicReferenceます。データベースからデータを取得し、それをマップに配置してから、「古い」マップとアトミックに交換します。そうすれば、どのクライアントコードでもマップをフェッチして、それが事実上スナップショットであり、その下で変更されないことを知ることができます。

また、私にはクラスの別のメンバーがいます。それらのいくつかは定数であり、それらのいくつかはメモリからロードされます。ただし、それらすべてに1つの共通のプロパティがあります。それらはすべてのインスタンスで常に同じです(静的)。したがって、すべてを1つのクラスに含めることは理にかなっていますか、それとも2つの別個のクラスを含める必要があります。

それはかなり漠然とした説明です。指定した属性(定数、メモリからのロード、1つの共通プロパティ、静的)は、同じクラスにあるかどうかとは関係ありません。

于 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.

Cohesiveクラスとは、その名前を反映するメソッドを持つクラスを意味します。

例えば:

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