有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java多线程逻辑情况

S1: Lookup for some input data
S2:  IF not found SET IT
S3:  INSERT DATA
S4:  ELSE RETURN

最初没有存储任何数据。 如果两个线程同时查找相同的输入数据,则在这两种情况下查找都返回FALSE。然后两者都会经历长时间设置阶段。最后,单例服务线程在非同步插入方法中插入条目

通过这种方式,尽管查找的目的是永远不会让相同的数据丢失两次,但由于两个线程处理相同的数据,它的目的并没有得到解决。如何在多线程程序中处理这种情况


共 (2) 个答案

  1. # 1 楼答案

    已应用双重检查锁定:

    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
    
  2. # 2 楼答案

    如果您使用的是数据库,那么您一直在寻找的关键字是upsert

    如果是普通编码,您可能需要atomicssynchronization

    如果你能澄清你的问题,也许我们可以进一步帮助你