gpt4 book ai didi

java - 测试线程程序

转载 作者:行者123 更新时间:2023-12-01 08:15:59 26 4
gpt4 key购买 nike

我已经为 Readers-Writers problem 开发了一个解决方案使用线程。

我有一个监视器类、一个读取器类和一个写入器类。读取器类和写入器类扩展线程。

现在我正在测试这样的代码:

public static void main(String[] args) {

ReadersWriters controller = new ReadersWriters();
Reader r0=new Reader(controller);
Reader r1=new Reader(controller);
Reader r2=new Reader(controller);
Reader r3=new Reader(controller);
Writer w0=new Writer(controller);
Writer w1=new Writer(controller);
Writer w2=new Writer(controller);
Writer w3=new Writer(controller);
r0.run();
w0.run();
r2.run();
r3.run();
r1.run();
r3.run();
r2.run();
w2.run();
r1.run();
w1.run();
w3.run();
}

我得到的输出是这样的:

Reader number 0 arrives
Reader number 0 starts to read
Reader number 0 finishes reading
Writer number 0 arrives
Writer number 0 starts to write
Writer number 0 finishes writing
Reader number 2 arrives
Reader number 2 starts to read
Reader number 2 finishes reading

...等等。这里的问题是我无法测试并发性。因为看起来我的主程序正在一一调用 Reader 或 writer,这不是我想要实现的测试。

任何人都可以帮助我吗?请随时询问您可能需要的任何说明。

最佳答案

看起来您已经实现了一个Runnable,但没有将其包装在线程中。我怀疑您是在 Runnable 上调用 run(),而不是在线程上调用 start()。查看 defining/starting a thread 上的教程部分.

您无法在单元测试等中可靠地测试多线程代码。它可以工作一次,也可以工作多次,并且在一百万个测试用例中只会失败一次(或立即在生产中失败)。我喜欢线程安全的编码技术(例如编写不可变对象(immutable对象))、静态代码分析工具(例如 PMD),也许还有 code reviews如果您不确定。

关于java - 测试线程程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13335473/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com