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

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

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

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

背景

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

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

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

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

JCStress使用

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

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

JCStress使用示例

测试用例1:PaP28资讯网——每日最新资讯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:PaP28资讯网——每日最新资讯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可以提高并发程序的质量和可靠性,减少并发问题的出现。PaP28资讯网——每日最新资讯28at.com

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

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

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

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

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

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

标签:
  • 热门焦点
  • Mate60手机壳曝光 致敬自己的经典设计

    8月3日消息,今天下午博主数码闲聊站带来了华为Mate60的第三方手机壳图,可以让我们在真机发布之前看看这款华为全新旗舰的大致轮廓。从曝光的图片看,Mate 60背后摄像头面积依然
  • 小米官宣:2023年上半年出货量中国第一!

    今日早间,小米电视官方微博带来消息,称2023年小米电视上半年出货量达到了中国第一,同时还表示小米电视的巨屏风暴即将开始。“公布一个好消息2023年#小米电视上半年出货量中国
  • 6月安卓手机性能榜:vivo/iQOO霸占旗舰排行榜前三

    2023年上半年已经正式过去了,我们也迎来了安兔兔V10版本,在新的骁龙8Gen3和天玑9300发布之前,性能榜的榜单大体会以骁龙8Gen2和天玑9200+为主,至于那颗3.36GHz的骁龙8Gen2领先
  • 十个可以手动编写的 JavaScript 数组 API

    JavaScript 中有很多API,使用得当,会很方便,省力不少。 你知道它的原理吗? 今天这篇文章,我们将对它们进行一次小总结。现在开始吧。1.forEach()forEach()用于遍历数组接收一参
  • 三言两语说透柯里化和反柯里化

    JavaScript中的柯里化(Currying)和反柯里化(Uncurrying)是两种很有用的技术,可以帮助我们写出更加优雅、泛用的函数。本文将首先介绍柯里化和反柯里化的概念、实现原理和应用
  • 雅柏威士忌多款单品价格大跌,泥煤顶流也不香了?

    来源 | 烈酒商业观察编 | 肖海林今年以来,威士忌市场开始出现了降温迹象,越来越多不断暴涨的网红威士忌也开始悄然回归市场理性。近日,LVMH集团旗下苏格兰威士忌品牌雅柏(Ardbeg
  • 冯提莫签约抖音公会 前“斗鱼一姐”消失在直播间

    来源:直播观察提起“冯提莫”这个名字,很多网友或许听过,但应该不记得她是哪位主播了。其实,作为曾经的“斗鱼一姐”,冯提莫在游戏直播的年代影响力不输于现
  • 华为HarmonyOS 4升级计划公布:首批34款机型今日开启公测

    8月4日消息,今天下午华为正式发布了HarmonyOS 4系统,在更流畅的前提下,还带来了不少新功能,UI设计也有变化,会让手机焕然一新。华为宣布,首批机型将会在
  • 回归OPPO两年,一加赢了销量,输了品牌

    成为OPPO旗下主打性能的先锋品牌后,一加屡创佳绩。今年618期间,一加手机全渠道销量同比增长362%,凭借一加 11、一加 Ace 2、一加 Ace 2V三款爆品,一加
Top