alt

首先观察公平锁或者非公平锁的lock()方法,这个方***直接调用acquire的方法,这个方***调用tryacquire()方法,在此之前不存在线程等待的过程。只有tryacquire失败之后才会存在线程的的挂起;所以使用lock方法一定让需要资源的线程获得锁;

而tryLock只是lock的一部分,他只是使用cas尝试获取资源,这个时候不一定会抢锁过程;

注意:后面使用时,为了解决效率问题,一般会先trylock(),如果不行可以使用自旋的方式;之后在lock();

总结:

1.lock()方法相当于synchronize()方法;而trylock()方法只是有机会获得锁,如果其他线程在访问锁,这是trylock()会返回一个false值;

2.trylock()支持传入一个timeout时间,时间之外未能获取锁,同样会返回false;这就是trylock()在一定时间内重复的尝试获取一个锁;

3.trylock()可以被中断;这些全部的区别,已经在源码中体现;关键是前面关于ReentrantLock,AQS的掌握程度;