2013-02-13 94 views
1

如何中断/恢复资源等待线程回到其他作品?说,我的线程正在等待资源在响应状态下挂起或不挂起的资源的响应。我怎样才能恢复该线程去做其他工作?如何恢复正在等待资源的线程?

其他线程是否可以向等待的线程发送异常,以便有例外,它可以回到它的其他工作?

更新:

我试了下来,但没有用。

我有超时的线程,它将检查是否发生了默认的超时发生在第一个线程等待的特定事务中,如果是,则在第一个线程上触发interrupt()调用。

+0

中断工作,无论等待什么都必须*可中断*。通常我会重新设计这个任务队列(例如'ExecutorService'),并且这个人可以以某种方式检查某个特定任务是否准备好执行(例如,所有预期的io已经完成)。这确实意味着转换你的系统变成一个异步系统 - 这是一项不平凡的任务。 – Nim 2013-02-13 12:26:53

+0

如果您正在等待资源,则应该使用http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Object.html#wait(long) – 2013-02-13 12:34:16

+1

什么样的操作线程块在? – 2013-02-13 13:18:21

回答

0

是的,你可以interrupt的线程。使用Thread.interrupt机制,谷歌它。

+0

我以前试过,但没用。我会更新这个问题。 – Kubuntu 2013-02-13 12:20:20

3

答案取决于很多因素。 中断线程的“正确”方式是使用thread.interrupt()方法。这要求线程的代码是合作的;应该通过处理由可中断操作(例如等待或睡眠)抛出的InterruptedException或定期检查当前线程的中断标志来了解中断。

然后,代码应该决定中断应该有什么后果。通常情况下,您希望一个线程在发生中断时正常终止。

而不是使用中断,我会检查您的阻止操作是否有内置的超时机制。例如,如果在obj.wait()上阻塞,则可以使用obj.wait(timeout)。