我的应用程序中有客户端和服务器线程。当我将这些应用程序作为独立应用程序运行时,这些线程可以正常通信。
但是,当我将客户端作为 JUnit 运行并将服务器作为独立运行时,客户端线程会在几秒钟内死亡。
我不明白,为什么会有如此不同的行为。
我的应用程序中有客户端和服务器线程。当我将这些应用程序作为独立应用程序运行时,这些线程可以正常通信。
但是,当我将客户端作为 JUnit 运行并将服务器作为独立运行时,客户端线程会在几秒钟内死亡。
我不明白,为什么会有如此不同的行为。
当 JUnit 运行程序终止时,所有生成的线程等也会被杀死(因为它很可能在单独的 JVM 实例中运行)。
这是一篇(相当旧的)文章,描述了您遇到的问题(虽然它推荐的 GroboUtils 库似乎很久以前就被放弃了)。另一个,最近的一个,使用新的 Java 并发框架提供了一个更现代的解决方案。
后一种解决方案的要点是它通过执行程序运行线程,执行程序通过Future
s 发布运行结果。并且Future.get
在线程完成任务之前一直处于阻塞状态,自动保持 JUnit 测试处于活动状态。您也许可以根据您的情况调整此技巧。