MyException - 我的异常网
当前位置:我的异常网» J2SE » java线程interrupte()方法中 重新获取锁 疑问求解!

java线程interrupte()方法中 重新获取锁 疑问求解!解决办法(2)

www.MyException.Cn  网友分享于:2013-12-29  浏览:26次

------解决方案--------------------
探讨
楼上所说的对书上的做了部分改进,就是在没有获取锁的时候,a1程序状态被标记为isInterrupted,但a1线程无法抛出异常。

可是,程序在运行时,a2线程一直占有对象的锁,按道理a1无法获取锁,但是程序运行结果显示,a1抛出异常并被捕获,说明抛出异常前的锁不是a2占有的锁,或者我的程序有问题?

我就是想弄清楚,到底这个锁指的是哪个锁?程序有问题吗?


……

------解决方案--------------------
书上说的并不是模糊,而是根本就是错误的:
“调用interrupt()方法时,会先重新获取锁定,在抛出InterruptedException异常”
这句话表明wait的线程重新获取锁定是因为调用了interrupt方法。这是错误的。

“调用interrupt()方法时会重新获得锁定”,是否重新获得锁定与是否调用interrupt()没有任何关系,那是系统调度的事情。正确的表述就是:
“调用interrupt()方法后,如果重新获取锁定,就会抛出InterruptedException异常”。
------解决方案--------------------
调用interrupt()方法时会提示中断,重新获得锁,虽然不是立刻执行,但是你不这样,会永远堵塞下去,这说明interrupt()在某种情况下能起作用。
------解决方案--------------------
说明你还是不懂。

文章评论

软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有