Java 线程的确定性执行,工具支持
Posted
技术标签:
【中文标题】Java 线程的确定性执行,工具支持【英文标题】:Deterministic execution of Java Threads, Tool support 【发布时间】:2011-03-16 05:40:09 【问题描述】:我正在寻找一种工具或 api,它允许出于测试目的确定性地执行 Java 线程。因此,允许在字节码中的某些位置在 java 代码中进行上下文切换。例如,我希望线程 t1 在字节码/源代码中的第 N 行抢占另一个线程 t2,依此类推。为了使情况更简单,让我们忽略同步或锁定。是否有任何工具,如果可能的话,开源定制的 JVM 可用。我知道一些工具,如 dejavu、LEAP,但我想了解一些有使用此类工具经验的人推荐的开源工具。
干杯, 讲义
【问题讨论】:
有趣。我通常只是设置一堆断点,然后随意启动和停止线程。但这很乏味,容易出错,而且绝对不能自动化。 签出Can a multi-threaded program ever be deterministic? 【参考方案1】:我不知道有什么工具可以完全满足您的需求,而且通常这会很困难,因为 JIT 等会模糊“线”的含义。所以你要么得到满足你目标的糟糕代码,要么得到不符合目标的真实代码。无论哪种方式,错误都可能溜走。我建议您查看ConTest,以更好地了解如何在这个一般领域进行测试。
【讨论】:
谢谢特伦特,亚当。我的意思是,字节码指令。说,我希望线程 T1 在字节码指令 X 处暂停其执行,并让另一个线程 T2 从它暂停的地方恢复执行,或者如果它应该开始则开始。我记得读过有关 ConTest 的文章,但我不认为它是开源的。 JIT 肯定会改变“字节码指令 X”的含义。是的,ConTest 不是开源的,但我没有看到比你想要的更接近的东西,抱歉......【参考方案2】:这里是不同解决方案的比较:http://sites.fct.unl.pt/sites/default/files/synergy-vm/files/2013-middleware-silva.pdf
【讨论】:
以上是关于Java 线程的确定性执行,工具支持的主要内容,如果未能解决你的问题,请参考以下文章
201871010101-陈来弟《面向对象程序设计(java)》第十七周学习总结