java – 如何等待线程生成它自己的线程?
我试图测试一个方法,它在一个单独的线程中工作,简化如下:
public void methodToTest() { Thread thread = new Thread() { @Override public void run() { Clazz.i = 2; } }; thread.start(); } 在我的单元测试中,我想测试Clazz.i == 2,但是我不能这样做,因为我认为在线程更改值之前运行assert.我想到使用另一个线程来测试它,然后使用join来等待,但它仍然不起作用. SSCCE: @Test public void sscce() throws InterruptedException { Thread thread = new Thread() { @Override public void run() { methodToTest() } }; thread.start(); thread.join(); AssertEquals(2,Clazz.i); } public static class Clazz { public static int i = 0; } 我认为这是因为测试主代码创??建一个等待(加入)到第二个线程的线程,但是第二个线程没有做这个工作,它创建另一个线程来完成工作,然后完成,这继续是第一个线程,而第三个线程在断言后执行Clazz.i = 2. 如何使它成为第一个线程等待它启动的线程以及该线程启动的任何线程? 解决方法
没有引用在methodToTest中创建的线程,你不能,很简单. Java没有提供找到“在特定时间段内产生的线程”的机制(即使是这样,这可能是一个使用丑的机制).
我看到,你有两个选择: > Make methodToTest等待它产生的线程.当然,如果你明确地希望这是一个异步的动作,那么你不会很好地做到这一点. 可以注意到,第二选择可以以几种不同的方式来形成.例如,你可以返回一些抽象的类似 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |