【发布时间】:2017-07-06 03:22:29
【问题描述】:
我现在在学校学习线程,我们不得不编写一个使用多个线程的程序,但是直到我使用thread.join()它才能正常工作
它现在应该像现在一样工作,但我不完全确定发生了什么。
原来我有这样的东西。它导致线程的输出相互冲突。
t1.start();
t2.start();
t3.start();
然后我就这样做了,输出很好,得到了正确的答案。
t1.start();
t1.join();
t2.start();
t2.join();
t3.start();
t3.join();
我的问题是,与第二个示例相比,第一个示例发生了什么?我一直在用谷歌搜索和搜索 stackoverflow,但似乎找不到完全帮助我理解的答案。
【问题讨论】:
-
如果您的程序在调用
.join()之前无法运行,那么您很可能遇到了同步问题(没有完整的代码很难判断)。如果您在 3 个线程之间共享和修改相同的对象,您可能需要考虑使用某种同步 -
这正是我现在正在研究的,我偶然发现了一篇文章。我正在跨线程共享一个二维数组。
-
您很可能希望查看
synchronized关键字或 ReentrantLock -
Jayfray 我希望我能将您的评论标记为正确!
synchronized解决了这个问题!谢谢。 -
从技术上讲,
synchronized不是您问题的答案。您问使用join()和不使用它有什么区别。虽然我读了字里行间并且知道你的问题是什么。很高兴我能帮上忙。
标签: java multithreading