aru*_*esh 5 java concurrency multithreading interrupted-exception
考虑到wait()只能在同步上下文中调用,随后释放监视器,直到另一个线程在同一对象上调用notify/nofityAll为止,
假设线程A在wait()上阻塞,这导致线程B获取锁.现在,如果我们中断线程A,控件是否会立即转移到线程A?在这种情况下,由于处理InterrupException的try catch块在同步上下文中,并且因为一次只能有一个Thread可以保存监视器,所以Thread B会发生什么?它应该移动到阻塞状态,直到线程A完成执行?
提前致谢
阅读文档确实有助于:
http://download.oracle.com/javase/1.4.2/docs/api/java/lang/Object.html#wait%28long%29
因此,当线程被中断时,它必须重新获取Object的监视器以在抛出异常之前恢复同步状态.同样适用于在指定的时间量过去之后从等待(长)调用返回.
然后从该对象的等待集中删除线程T并重新启用线程调度.然后它以通常的方式与其他线程竞争,以便在对象上进行同步; 一旦它获得了对象的控制权,它在对象上的所有同步声明都将恢复到原状 - 即,调用wait方法时的情况.线程T然后从wait方法的调用返回.因此,从wait方法返回时,对象和线程T的同步状态与调用wait方法时的状态完全相同.
如果当前线程在等待时被另一个线程中断,则抛出InterruptedException.在如上所述恢复此对象的锁定状态之前,不会抛出此异常.
归档时间: |
|
查看次数: |
4246 次 |
最近记录: |