S1: Lookup for some input data
S2: IF not found SET IT
S3: INSERT DATA
S4: ELSE RETURN
最初没有存储数据。 如果2个线程同时查找相同的输入数据,则在两种情况下查找都返回FALSE。然后两个线程都经历长SET阶段。最后一个单例服务Thread Inserts条目在非同步的Insert方法中。
通过这种方式,尽管查找旨在永远不会让相同的数据变为两次,但由于2个线程处理相同的数据,因此其目的无法解决。请问在多线程程序中处理这种情况?
答案 0 :(得分:0)
应用双重检查锁定:
S1: Lookup for some input data
S2: IF not found {
synchronized(getClass()) {
S2-1: Lookup for some input data
S2-2: IF not found
S2-3: INSERT DATA
}
S3: RETURN result of S1, S2-1, or S2-3