逐行解析,预计阅读时间20分钟.
首先尝试tryacquire方法,tryacquire方法在AQS中没用具体实现(在子类),
选择ReentrantLock 的NofairSync 实现查看
首先获取当前线程.同时拿到state状态c,如果c=0,说明无线程持有,使用cas抢占,同时将exclusiveOwnerThread(AQS继承自AbstractOwnableSynchronizer)设置为当前线程,并返回true.c!=0时,进行下一步判断,如果exclusiveOwnerThread!=当前线程,那么必定被其他线程占有并标记.这时候返回false.如果exclusiveOwnerThread=当前线程,那么说明该资源被当前线程占有,这是相当于重入,修改state,返回true.
总结:tryacquire方法,就是试着抢占