代码之家  ›  专栏  ›  技术社区  ›  zjffdu

有没有什么方法或工具可以用来验证我的API在Java中是否是线程安全的?

  •  8
  • zjffdu  · 技术社区  · 15 年前

    我为外部世界制作了一个工具并提供了一个API,但是我不确定它是否是线程安全的。因为用户可能不想在多线程环境中使用它。有没有什么方法或工具可以用来验证我的API在Java中是否是线程安全的?

    6 回复  |  直到 15 年前
        1
  •  6
  •   Péter Török    15 年前

    压力测试 ,或 静态分析工具,如 PMD FindBugs 可以揭开 代码中的并发错误。所以这些可以显示你的代码 线程安全。但是他们永远无法证明它是否是线程安全的。

    最有效的方法是彻底的 由具有并发经验的开发人员进行代码审查

        2
  •  17
  •   Redwood    15 年前

    你必须非常仔细地分析你的程序,以确保它是线程安全的。考虑购买“实践中的Java并发”(非常好的Java并发解释)。

        3
  •  1
  •   Colin Hebert    15 年前

    jmeter

    但是线程的主要问题是它们大多是不可预测的,所以即使是压力测试等。 你不能百分之百确定它是完全线程安全的


    资源:

        4
  •  1
  •   Kajetan Abt    15 年前

    这是停止问题的变体(或所谓的“减少”)。因此它是 对于所有不重要的案件。(是的,这是编辑)

        5
  •  1
  •   soru    15 年前

    我想那些说证明任意多线程程序是线程安全的人在某种程度上是不可能的,是正确的。一个任意的多线程程序,在没有严格指导的情况下进行编码 有线程错误,你就不能有效地证明不是真的。

    CheckThread . 它基于注释或xml配置文件工作。如果您将一个方法标记为“@ThreadSafe”,但它不是,那么您将得到一个编译时错误。这是通过查看线程不安全操作的字节码来检查的,例如未同步数据字段上的读/写序列。

    它还处理那些需要在特定线程(例如Swing)上调用方法的api。

    它实际上并不处理死锁,但是可以使用诸如 Jlint . 你只需要遵循一些最低的标准,比如确保锁是根据DAG获得的,而不是随意的。

        6
  •  0
  •   Community Mohan Dere    9 年前

    在某些情况下,你可以证明它是坏的,这太棒了!

    您可能还对自动死锁检测感兴趣,在某些情况下,它只是“正常工作”。我正在数百个桌面上发布一个Java程序,安装了这样一个死锁检测器,这是一个非常好的工具。例如:

    http://www.javaspecialists.eu/archive/Issue130.html

    您还可以通过各种方式对应用程序进行压力测试。

    我问了一个问题,如何在Un*x系统上轻松创建高CPU负载,例如:

    Bash: easy way to put a configurable load on a system?