涉及数据库更新和读取的两个线程之间的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 楼答案
用synchronized锁定整个东西,一个线程一次访问该部分,从redis获取,更新,在redis中再次保存