Java 测试线程程序
我已经开发了一个使用线程的解决方案 我有一个monitor类、一个Reader类和一个Writer类。Reader和Writer类扩展线程 现在,我正在这样测试代码:Java 测试线程程序,java,multithreading,concurrency,Java,Multithreading,Concurrency,我已经开发了一个使用线程的解决方案 我有一个monitor类、一个Reader类和一个Writer类。Reader和Writer类扩展线程 现在,我正在这样测试代码: public static void main(String[] args) { ReadersWriters controller = new ReadersWriters(); Reader r0=new Reader(controller); Reader r1=new Reader(controller);
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
上调用run()
,而不是在线程上调用start()
。检查上的教程部分
您无法在单元测试之类的测试中可靠地测试多线程代码。它可以工作一次或多次,并且在一百万个测试用例中只失败一次(或者在生产中立即失败)。我更喜欢线程安全的编码技术(如编写不可变对象)、静态代码分析工具(如PMD),如果您不确定的话,也可以选择。看起来您实现了一个
可运行的
,但没有将其包装在线程中。我怀疑您是在Runnable
上调用run()
,而不是在线程上调用start()
。检查上的教程部分
您无法在单元测试之类的测试中可靠地测试多线程代码。它可以工作一次或多次,并且在一百万个测试用例中只失败一次(或者在生产中立即失败)。我更喜欢线程安全编码技术(如编写不可变对象)、静态代码分析工具(如PMD),如果您不确定的话,也可以使用。您应该使用start方法调用(调用)threads run方法<应该使用thread.start()
调用code>public void run()
应该是
r0.start();
您应该使用start方法调用(调用)threads run方法<应该使用thread.start()
调用code>public void run()
应该是
r0.start();
您应该实现
Runnable
接口,并使用ThreadPoolExecutor
来运行/控制线程,而不是扩展Thread
并调用Thread.run()
您应该实现Runnable
接口,并使用ThreadPoolExecutor
来运行/控制线程