中文

Java 类线程安全分析的可扩展方法——基于 CodeQL

软件工程 2025-09-03 v1

摘要

在面向对象语言中,软件开发人员依赖线程安全类来实现并发应用程序。然而,确定一个类是否线程安全是一个具有挑战性的任务。本文提出了一种高度可扩展的方法,用于分析 Java 类的线程安全性。我们提出一种基于 Java 内存模型正确性原则(数据竞争自由)的线程安全定义。我们设计了一组确保 Java 类线程安全的属性,并证明了这些属性的有效性。我们将这些属性编码到静态分析工具 CodeQL 中,用于自动分析 Java 源代码。我们对 top 1000 个 GitHub 仓库进行了评估。该评估涉及 3632865 个 Java 类;其中 1992 个类标记为 @ThreadSafe,来自 71 个仓库。这些仓库包括 Apache Flink(24.6k 星)、Facebook Fresco(17.1k 星)、PrestoDB(16.2k 星)和 gRPC(11.6k 星)。我们的查询检测到了数千个线程安全错误。我们的查询运行时间对最多 20 万行代码、2 万个方法、6000 个字段和 1200 个类的仓库均低于 2 分钟。我们将检测到的部分并发错误提交为 PR,开发者对这些 PR 表示积极反应。我们将我们的 CodeQL 查询提交至主 CodeQL 仓库,目前正在成为 GitHub actions 的一部分。结果表明,我们的方法在实际代码库中具有可应用性和可扩展性。

关键词

引用

@article{arxiv.2509.02022,
  title  = {Scalable Thread-Safety Analysis of Java Classes with CodeQL},
  author = {Bjørnar Haugstad Jåtten and Simon Boye Jørgensen and Rasmus Petersen and Raúl Pardo},
  journal= {arXiv preprint arXiv:2509.02022},
  year   = {2025}
}