看源码的时候(AbstractQueuedSynchronizer类)if条件判断中调用的一个方法的返回类型是布尔类型,但方法体中没有返回布尔类型,这事怎么回事有知道的吗?if是否会执行?
调用下面的方法
aqs使用的设计模式是模板方法,这些直接抛出异常的方法如果要使用,需要在子类中重写,你可以看一下一些已经实现的子类,如ReentrantLock的实现。
目测,应该是直接异常抛出了吧,这个异常不是说明了吗,不支持的操作。
表示这个方法不支持,如果被调用,直接抛异常。
这个方法的作用是视图设置状态来反映共享模式下对象的释放状态,如果此对象现在处于完全释放状态,从而使正在等待的线程都可以试图获得此对象,则返回 true;否则返回 false 。如果不支持共享模式则抛出UnsupportedOperationException.
一个方法如果丢出异常,可以不返回返回值。
这里丢出的是“不支持的操作”异常,说明这个方法只是一个占位符,因为实现接口需要写这么一个方法,但是实际上又实现不了。
好比驼鸟的“飞”这个方法(鸵鸟从鸟类派生,但是鸵鸟又不会飞)
调用的时候抛出,运行时异常, 直接方法结束了。 故有没有返回值,都没有意义了。
这个时候void、 任意返回值类型 都是一样的。
目测,应该是直接异常抛出了吧,这个异常不是说明了吗,不支持的操作。支持三楼
我个人感觉,这样写的目的是,要求子类继承时必须重写tryReleaseShared方法,否则就抛出异常
final修饰的,不会改变
为什么没有判断支持不支持共享模式就直接抛不支持共享模式的异常了
调用之前就抛异常了,所以是异常退出了