了解J2ME中RecordStore的同步需求

时间:2012-01-25 18:55:18

标签: java-me synchronization midp recordstore

阅读RecordStore documentation,可以阅读以下内容:

Record store implementations ensure that all individual record store operations are atomic, synchronous, and serialized, so no corruption will occur with multiple accesses.

然后在下一句话:

However, if a MIDlet uses multiple threads to access a record store, it is the MIDlet's responsibility to coordinate this access or unintended consequences may result.

我不知道该怎么做。操作是原子的和同步的,但我必须自己同步访问?假设我不需要迭代记录,我需要为简单的添加/更新/删除功能提供什么类型的同步?

如果我需要迭代,如果我使用RecordEnumerationenumerateRecords方法是否会拍摄RecordStore的快照,还是直接连接到它?

1 个答案:

答案 0 :(得分:2)

  

但是,如果MIDlet使用多个线程来访问记录存储,则MIDlet有责任协调此访问,否则可能会产生意外后果。

我认为这意味着同时在商店中读取和写入记录的两个线程可能会产生不良结果;特别是当你依赖某个特定订单的商店,或者记录中有已知的索引时。

你的第二个问题在RecordStore.enumerateRecords()的Javadoc中被回答:

  

keepUpdated - 如果为true,则枚举器将使其记录存储的记录中的任何更改保持其枚举。请谨慎使用,因为可能会产生性能影响。如果为false,则枚举将不会保持最新,并且可能会返回已删除的记录的recordIds或稍后添加的记录。它还可能返回在枚举构建后已修改的无序记录。请注意,稍后在直接或通过枚举检索记录时,会准确反映记录存储中记录的任何更改。通过将此参数设置为false而存在风险的是在修改,添加或删除记录时枚举的过滤和排序顺序。