当前位置: 首页 > 知识库问答 >
问题:

动态集的健全性检查

云默
2023-03-14

我有一个对象队列集,该对象由 Java 中的并发跳过列表集创建

请注意,与大多数集合不同,size方法不是恒定时间操作。由于这些集合的异步性质,确定当前元素的数量需要遍历元素,因此如果在遍历过程中修改此集合,可能会报告不准确的结果。此外,批量操作addAll、removeAll、retainAll、capsAll、equals和toArray不能保证以原子方式执行。例如,与addAll操作同时操作的迭代器可能只查看一些添加的元素。

问题:这个if(!activeQueueSet.add(队列))有缺陷,但正如您从留档中看到的,它是一个O(n)操作,即遍历整个集合,这在某种程度上误解了列表的状态很多次。我正在寻找一个万无一失的健全检查。

共有1个答案

孙朝明
2023-03-14

的确,您的 ConcurrentSkipListSet.add(元素) 可以返回 truefalse,具体取决于该集是由使用迭代器的另一个线程同时修改的,迭代器在这里是弱一致性的,还是由批量方法(即 xxxAll())修改的,这些方法不是原子的。

但是请注意,< code>add()和< code>remove()方法是线程安全的,所以只要您只使用这些方法来修改您的集合,就不会有问题。

这将取决于您的具体应用程序如何处理它。如果元素不在那里,但被添加了,那就好了。如果元素一开始就在那里,因此没有添加,这会不会很糟糕?

您可以设计一个包含(或可能扩展)ConcurrentSkipListSet 的类,该类具有非常受控的 API,可防止任何有问题的操作,或者通过使用锁使它们线程安全。

 类似资料:
  • 我正在尝试使用Postman为OneDrive生成OAuth令牌。我只是想澄清一下身份验证URL、访问令牌URL和作用域是什么? 我尝试过: 认证网址:https://login.microsoftonline.com/common/oauth2/v2.0/authorize 访问令牌URL:https://login.microsoftonline.com/common/oauth2/v2.0/

  • 我有一个带有2个主机的consur堆栈(用于测试)。1台主机仅在引导模式下运行consur,另一台主机在注册器下运行客户端模式,用于自动注册服务(均在docker上运行)。现在,如果我启动一个应用程序(例如8080端口)容器,注册器将检测并将其注册到Consor,但它没有我想要的http检查。我发现Registrator有自动注册健康检查的选项是将SERVICE\u 8080\u check\u

  • 当我使用动态端口设置时,我的ECS设置在运行状况检查中不断失败。 这是我的设置: 我有一个spring boot web应用程序,它使用端口10440。因此,在我的任务定义中,我使用端口0作为我的主机端口来启用动态移植,并使用10440作为我的容器端口。我有两个2 ec2实例,在我的服务中运行2个任务。但由于健康检查失败,我的任务一直在终止。 屏幕截图: -任务事件日志 -目标组中注册的ec2实例

  • 我希望能够在生产环境中对已部署的消息驱动Bean进行健康检查。我最初的想法是添加一个方法,确保JMS队列(用于读取)和数据库(用于写入)都可用,然后将此health方法作为REST API公开。不幸的是,由于MDB不像其他类型的EJB那样是可注入的,我无法从我的REST控制器获取对它的引用。。。 有没有办法通过REST API公开消息驱动bean的方法?或者有没有其他方法来实现我最初的目标? 编辑

  • SOFABoot 为 Spring Boot 的健康检查能力增加了 Readiness Check 的能力。如果你需要使用 SOFA 中间件,那么建议使用 SOFABoot 的健康检查能力的扩展,来更优雅的上线应用实例 引入健康检查扩展 要引入 SOFABoot 的健康检查能力的扩展,只需要引入以下的 Starter 即可: <dependency> <groupId>com.alipay

  • 在接收开发团队的软件构建(代码中的微小更改)时进行的完整性测试。理智测试的目的是确保所有缺陷都得到解决。这是一种回归测试,仅关注一些受影响的功能。 可以在两种情况下进行健全性测试:一种是在第二次增强的情况下,一种是在缺陷固定的情况下。它确保代码或函数中所做的更改不会对相关模块产生影响,因此无法应用。 进行健全性测试的过程 同样,冒烟测试测试人员不需要是一个单独的测试用例进行健全性测试。测试人员只需