Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring数据redis RedisMessageListenerContainer似乎有竞争条件_Java_Multithreading_Spring Data Redis - Fatal编程技术网

Java Spring数据redis RedisMessageListenerContainer似乎有竞争条件

Java Spring数据redis RedisMessageListenerContainer似乎有竞争条件,java,multithreading,spring-data-redis,Java,Multithreading,Spring Data Redis,lazyListen()方法将listening标志设置为true,然后启动一个线程来运行SubscriptionTask。调用addMessageListener(),然后使用相同的JedisConnection订阅更多主题。但是SubscriptionTask启动进程没有保护,对addMessageListener()的调用可能在该进程完成之前到达,因此订阅可能会完全丢失,或者两个线程可能同时写入同一输出流,因此Redis会被发送一个损坏的命令 在取消订阅所有主题后关闭任务时,也会出现类似问

lazyListen()
方法将
listening
标志设置为true,然后启动一个线程来运行SubscriptionTask。调用
addMessageListener()
,然后使用相同的JedisConnection订阅更多主题。但是SubscriptionTask启动进程没有保护,对
addMessageListener()
的调用可能在该进程完成之前到达,因此订阅可能会完全丢失,或者两个线程可能同时写入同一输出流,因此Redis会被发送一个损坏的命令

在取消订阅所有主题后关闭任务时,也会出现类似问题。在将新的subscribe命令返回池之前,可以在连接上发送该命令。如果该连接随后用于非订阅命令,则会发生错误


通过订阅主题并等待订阅任务完全建立后再允许进一步连接,并且永远不要取消订阅,可以缓解此问题。但即使如此,如果由于引发异常而关闭任务,则仍可能发生此情况,因此下次订阅主题时将创建一个新的SubscriptionTask。

是否介意在中打开一个问题。最好提供一些代码来重新介绍您所面临的问题。谢谢啊,我以前没发现。提交的DATAREDIS-389:已经看到了这个-我们会检查-感谢测试用例!