多线程逻辑情境

时间:2013-02-25 23:03:48

标签: java multithreading

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个线程处理相同的数据,因此其目的无法解决。请问在多线程程序中处理这种情况?

1 个答案:

答案 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