所以我有一些代码,我在我的主线程中创建了6个运行一些代码的线程。我启动线程。然后我在线程上调用join()
,以便主线程在继续执行之前等待它们全部死亡。
现在,我正在使用一些非常基本且非常不准确的方法来衡量我的代码运行的时间。只需要在开始,结束时调用系统时间,然后打印差异。
让我们说,例如,它需要大约500毫秒来运行我的所有代码。
我决定删除每个线程对join()
的调用,而我只是让我的主线程休眠20ms。这导致我的代码在200ms左右完成,并且主线程设法继续执行来自工作线程的正确数据 - 即6个工作线程必须在20ms等待中完成。
因此,当我在每个工作线程上使用.join时,为什么需要这么长时间呢?当然,我无法将主要方法中的呼叫保持为sleep(20)
,而宁愿使用join()
之类的内容
答案 0 :(得分:3)
多线程错误的问题是,当它无法正常工作时,您似乎可以正常工作。您的线程可能会在最后执行您不需要的操作,或者您加入线程不会立即使用结果。无论如何,我建议你正确等待结果。
BTW我会使用ExecutorService,因为这允许你回收你的线程,并以Future<MyResult>
注释的形式等待你需要的结果,这也会捕获并抛出异常/错误。
答案 1 :(得分:0)
如果取出连接,您的代码也可能无法完成。如果你的main函数退出而没有加入它的所有线程,那么有些可能会通过setDaemon()设置为守护程序线程,这会阻止程序清理等待它们。
您拥有所涉及的所有代码吗?