【发布时间】:2013-11-10 17:35:32
【问题描述】:
所以我有一些代码,我正在创建 6 个线程,在我的主线程中运行一些代码。我开始线程。然后我在线程上调用join(),以便主线程在继续执行之前等待它们全部死亡。
现在,我正在使用一些非常基本且很可能不准确的方法来衡量我的代码运行所需的时间。只需调用在开始、结束时获取系统时间,然后打印差异。
假设运行我的所有代码大约需要 500 毫秒。
我决定删除每个线程对join() 的调用,而我只是告诉我的主线程休眠 20 毫秒。这导致我的代码在大约 200 毫秒内完成,并且主线程设法使用来自工作线程的正确数据继续执行 - 即 6 个工作线程必须在 20 毫秒的等待中完成。
因此,为什么在每个工作线程上使用 .join 会花费这么长时间?自然,我不能在 main 方法中保持对sleep(20) 的调用,而宁愿使用join() 之类的东西
【问题讨论】:
-
区别在于
join是正确的解决方案,而sleep不是。由于您编写的实际代码的某些巧合,它可能会起作用,但不能保证总是有效。我认为您应该编写一些重要的代码以使事情更清晰。 -
您能否让每个线程打印一些内容以确认它们已完成。
-
6个线程的计算是否占用CPU?
-
看起来工作线程并没有在工作完成后立即死亡。
-
您是否通过让工作线程自己打印结果来从工作线程中找到正确的数据?如果是这样,请先尝试在线程上调用 setDaemon(true),然后您会发现它们实际上并没有完成。默认情况下,main 将等待所有线程完成。
标签: java multithreading join