有 Java 编程相关的问题?

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

涉及数据库更新和读取的两个线程之间的java竞争条件

考虑一种情况:

List = get_list_by_key(key) //get from redis
if(list.size() != 0)
{
  //do something
} else 
{
  add_to_list(key, value) //put to redis
}

我面临的问题是,当两个线程同时进入时,当列表为空时,(我不能等待另一个线程启动,这可能永远不会),有什么好的方法来处理这个问题吗

理想情况下,如果应该执行块,但在上述情况下,则不会执行

编辑:这段代码是在集群环境中运行的应用程序的一部分,因此同步可能不可能,在我的情况下,锁定也是不可行的,因为它会阻塞另一个线程(我正试图避免)


共 (1) 个答案

  1. # 1 楼答案

    用synchronized锁定整个东西,一个线程一次访问该部分,从redis获取,更新,在redis中再次保存

    public synchronized void doStuff (String key, String value) {
      List = get_list_by_key(key) //get from redis
      if(list.size() != 0) {
        //do something
      } else {
      add_to_list(key, value) //put to redis
      }
    }