如何使用Java中的另一个线程使线程休眠

ast*_*nka 5 java multithreading event-handling

我有两个执行线程(比如Thread1和Thread2).Thread2正在侦听特定事件,并且当事件发生时,它想要停止执行Thread1并触发操作.完成操作后,需要从停止的位置继续执行Thread1.

我应该采用什么样的方法在Java中执行此操作?

JB *_*zet 8

干净的方法,恕我直言,是让Thread1定期轮询一些状态变量,看看是否有人要求暂停.如果它被要求暂停,那么它应该暂停执行,等待释放一些锁.

Thread2应该通过更改共享状态变量的值来要求Thread1暂停,然后等待Thread1接受暂停请求,然后执行其操作并释放Thread1正在等待的锁定.

简而言之,两个线程必须协作.我没有办法在没有合作的情况下干净地暂停一个线程.


Mat*_*arz 5

您(当然)需要引用您想要停止的主题.你可以通过调用'suspend'方法暂停它:http://download.oracle.com/javase/6/docs/api/java/lang/Thread.html#suspend()在线程上.同样,您可以调用'resume'让线程再次运行.

但是,请注意,由于您不知道线程停止在哪里,因此极易出现死锁问题.

  • 没有理由进行贬低.暂停/恢复是正确的模式,我们不能责怪Matthias在Java中的错误实现.**和** - 马蒂亚斯在他的回答中添加了警告.显示他完全清楚,这些方法是被剥夺的,为什么会这样.我们*仍然可以使用这些方法,但我们必须非常谨慎地选择环境. (3认同)

bin*_*680 1

在线程 2 中使用 join,请在此处阅读更多信息http://download.oracle.com/javase/tutorial/essential/concurrency/join.html