【发布时间】:2011-08-09 18:59:10
【问题描述】:
我正在尝试调试一个问题。我们很少有线程处理来自 BoundedLinkedQueue 的数据。处理完一条记录后,当前线程执行Thread.currentThread().yield()。
现在,有时会观察到其中一个线程消失了!我跟踪了日志,发现这样一个“消失”的线程一直工作到 yield 语句。之后,找不到该线程的任何痕迹 - 在该线程看到的最后一个日志附近也不会引发任何错误或异常。
任何人都可以为调试方向提供任何指示吗?产量的使用是否正确?产量是一个可靠的说法吗?这是因为我发现 this 文章建议避免使用 yield 语句?有没有人见过这样的情况?
编辑:在一些研究中,似乎 try/catch 可能会遗漏一些异常,这些异常会被放入 System.err 中,这在多线程环境中可能不明显。感谢@JVerstry 的指针,我为线程设置了 uncaughtexceptionhandler。构建和运行过程需要很长时间。一旦我有了具体的东西,会更新更多。 以下是一些关于 UncaughtExceptionHandler 的链接:
【问题讨论】:
-
你在什么操作系统/架构上运行?使用产量的理由?
-
不知道你的线程为什么会消失,但是 yiel 是一个静态方法,并且总是暂停当前线程。你应该使用
Thread.yield() -
能否请您发布源代码的示例快照
标签: java multithreading concurrency yield