当前位置:首页 > 科技  > 软件

JCStress—验证你的并发程序是否正确

来源: 责编: 时间:2023-10-26 17:12:02 409观看
导读背景JCStress(Java Concurrency Stress Tests)是一个用于测试和验证Java并发程序正确性的工具。它是OpenJDK项目的一部分,旨在帮助开发人员发现并发程序中的竞态条件、死锁、内存可见性等问题。JCStress提供了一组注解和

gQ928资讯网——每日最新资讯28at.com

背景

JCStress(Java Concurrency Stress Tests)是一个用于测试和验证Java并发程序正确性的工具。它是OpenJDK项目的一部分,旨在帮助开发人员发现并发程序中的竞态条件、死锁、内存可见性等问题。gQ928资讯网——每日最新资讯28at.com

JCStress提供了一组注解和API,使得编写并发测试变得简单和方便。使用JCStress,您可以定义和运行各种类型的并发测试,包括多线程竞争测试、内存可见性测试、有序性测试等。JCStress会自动执行大量的并发测试用例,并生成详细的测试报告,以帮助您分析和理解并发程序的行为。gQ928资讯网——每日最新资讯28at.com

JCStress的主要特点包括:gQ928资讯网——每日最新资讯28at.com

  • 并发测试:JCStress支持编写各种类型的并发测试,包括竞争条件测试、死锁测试、内存可见性测试等。
  • 自动化测试:JCStress会自动执行大量的并发测试用例,并尝试发现潜在的并发问题。
  • 测试报告:JCStress生成详细的测试报告,包括测试结果、执行时间、线程状态等信息,以帮助您分析并发程序的行为。
  • 高度可配置:JCStress提供了丰富的配置选项,如线程数、迭代次数、测试模式等,以满足不同类型的并发测试需求。

JCStress使用

使用JCStress编写和运行并发测试的一般步骤包括:gQ928资讯网——每日最新资讯28at.com

  • 在测试类或测试方法上使用JCStress提供的注解,如@JCStressTest、@Actor、@Outcome等,来定义并发测试。
  • 使用JCStress提供的命令行工具或API来运行并发测试,并指定相关的选项和参数。
  • 分析和解释JCStress生成的测试报告,以发现并发问题并进行修复。

JCStress使用示例

测试用例1:gQ928资讯网——每日最新资讯28at.com

/*    This is our first concurrency test. It is deliberately simplistic to show    testing approaches, introduce JCStress APIs, etc.    Suppose we want to see if the field increment is atomic. We can make test    with two actors, both actors incrementing the field and recording what    value they observed into the result object. As JCStress runs, it will    invoke these methods on the objects holding the field once per each actor    and instance, and record what results are coming from there.    Done enough times, we will get the history of observed results, and that    would tell us something about the concurrent behavior.    How to run this test:       $ java -jar jcstress-samples/target/jcstress.jar -t API_01_Simple       ...        .......... [OK] org.openjdk.jcstress.samples.api.API_01_Simple          Scheduling class:            actor1: package group 0, core group 0            actor2: package group 0, core group 0          CPU allocation:            actor1: CPU #3, package #0, core #3            actor2: CPU #35, package #0, core #3          Compilation: split            actor1: C2            actor2: C2          JVM args: []          RESULT      SAMPLES    FREQ       EXPECT  DESCRIPTION            1, 1   46,946,789   10.1%  Interesting  Both actors came up with the same value: atomicity failure.            1, 2  110,240,149   23.8%   Acceptable  actor1 incremented, then actor2.            2, 1  306,529,420   66.1%   Acceptable  actor2 incremented, then actor1. */// Mark the class as JCStress test.@JCStressTest// These are the test outcomes.@Outcome(id = "1, 1", expect = ACCEPTABLE_INTERESTING, desc = "Both actors came up with the same value: atomicity failure.")@Outcome(id = "1, 2", expect = ACCEPTABLE, desc = "actor1 incremented, then actor2.")@Outcome(id = "2, 1", expect = ACCEPTABLE, desc = "actor2 incremented, then actor1.")// This is a state object@Statepublic class API_01_Simple {    int v;    @Actor    public void actor1(II_Result r) {        r.r1 = ++v; // record result from actor1 to field r1    }    @Actor    public void actor2(II_Result r) {        r.r2 = ++v; // record result from actor2 to field r2    }}

测试用例2:gQ928资讯网——每日最新资讯28at.com

@JCStressTest@Outcome(id = {"1, 2", "2, 1"}, expect = ACCEPTABLE, desc = "Mutex works")@Outcome(id = "1, 1",           expect = FORBIDDEN,  desc = "Mutex failure")@Statepublic class Mutex_06_Semaphore {    /*        How to run this test:            $ java -jar jcstress-samples/target/jcstress.jar -t Mutex_06_Semaphore    */    /*      ----------------------------------------------------------------------------------------------------------        Single-permit Semaphore can be used as a crude mutex too. Of course, this primitive        is much more flexible, it can admit a few threads at once with more permits.        On x86_64, AArch64, PPC64:          RESULT      SAMPLES     FREQ      EXPECT  DESCRIPTION            1, 1            0    0.00%   Forbidden  Mutex failure            1, 2  254,394,919   50.23%  Acceptable  Mutex works            2, 1  252,081,625   49.77%  Acceptable  Mutex works     */    private final Semaphore semaphore = new Semaphore(1);    private int v;    @Actor    public void actor1(II_Result r) {        try {            semaphore.acquire();            // critical section            r.r1 = ++v;            semaphore.release();        } catch (InterruptedException e) {            throw new IllegalStateException(e);        }    }    @Actor    public void actor2(II_Result r) {        try {            semaphore.acquire();            // critical section            r.r2 = ++v;            semaphore.release();        } catch (InterruptedException e) {            throw new IllegalStateException(e);        }    }}

JCStress总结

JCStress是一个强大的工具,可以帮助开发人员测试和验证Java并发程序的正确性。它广泛应用于Java开发社区,并被认为是Java并发测试领域的事实标准。使用JCStress可以提高并发程序的质量和可靠性,减少并发问题的出现。gQ928资讯网——每日最新资讯28at.com

参考资料:gQ928资讯网——每日最新资讯28at.com

【1】https://github.com/openjdk/jcstress/tree/master/jcstress-samples/src/main/java/org/openjdk/jcstress/samples。gQ928资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-15222-0.htmlJCStress—验证你的并发程序是否正确

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 你是否知道如何使用Python PyQt6事件处理器?

下一篇: JavaScript中闭包的四个有用技巧

标签:
  • 热门焦点
  • Redmi Pad评测:红米充满野心的一次尝试

    从Note系列到K系列,从蓝牙耳机到笔记本电脑,红米不知不觉之间也已经形成了自己颇有竞争力的产品体系,在中端和次旗舰市场上甚至要比小米新机的表现来得更好,正所谓“大丈夫生居
  • 一文搞定Java NIO,以及各种奇葩流

    大家好,我是哪吒。很多朋友问我,如何才能学好IO流,对各种流的概念,云里雾里的,不求甚解。用到的时候,现百度,功能虽然实现了,但是为什么用这个?不知道。更别说效率问题了~下次再遇到,
  • 自律,给不了Keep自由!

    来源 | 互联网品牌官作者 | 李大为编排 | 又耳 审核 | 谷晓辉自律能不能给用户自由暂时不好说,但大概率不能给Keep自由。近日,全球最大的在线健身平台Keep正式登陆港交所,努力
  • 腾讯VS网易,最卷游戏暑期档,谁能笑到最后?

    作者:无锈钵来源:财经无忌7月16日晚,上海1862时尚艺术中心。伴随着幻象的精准命中,硕大的荧幕之上,比分被定格在了14:12,被寄予厚望的EDG战队以绝对的优势战胜了BLG战队,拿下了总决
  • 签约井川里予、何丹彤,单视频点赞近千万,MCN黑马永恒文希快速崛起!

    来源:视听观察永恒文希传媒作为一家MCN公司,说起它的名字来,可能大家会觉得有点儿陌生,但是说出来下面一串的名字之后,或许大家就会感到震惊,原来这么多网红,都签约这家公司了。根
  • 大厂卷向扁平化

    来源:新熵作者丨南枝 编辑丨月见大厂职级不香了。俗话说,兵无常势,水无常形,互联网企业调整职级体系并不稀奇。7月13日,淘宝天猫集团启动了近年来最大的人力制度改革,目前已形成一
  • 华为Mate 60系列用上可变灵动岛:正式版体验将会更出色

    这段时间以来,关于华为新旗舰的爆料日渐密集。据此前多方爆料,今年华为将开始恢复一年双旗舰战略,除上半年推出的P60系列外,往年下半年的Mate系列也将
  • OPPO K11搭载长寿版100W超级闪充:26分钟充满100%

    据此前官方宣布,OPPO将于7月25日也就是今天下午14:30举办新品发布会,届时全新的OPPO K11将正式与大家见面,将主打旗舰影像,和同档位竞品相比,其最大的卖
  • 三翼鸟智能家居亮相电博会,让用户体验更真实

    2021电博会在青岛国际会展中心开幕中,三翼鸟直接把“家”搬到了现场,成为了展会的一大看点。这也是三翼鸟继9月9日发布了行业首个一站式定制智慧家平台后的
Top