tryLock方法:
线程在调用lock方法来获得另一个线程所持有的锁的时候,很可能发生阻塞。应该更加谨慎的申请锁。
tryLock方法试图申请一个锁,成功返回true,否则返回false。
tryLock可以带有超时参数,例如:
lock.tryLock(100,TimeUnit.MILLISECONDS);
第一个参数是数值,第二个参数是单位。
如果调用带有超时参数的tryLock,那么如果线程在等待期间被中断,将抛出InterruptedException异常,这代表着允许程序打破死锁。
也可以调用lockInterruptibly方法,相当于超时为无限的tryLock方法。
条件对象进行等待时,也可以提供一个超时。
读写锁:
ReentrantReadWriteLock
读写锁允许同时有很多线程读取但仍然只能有一个线程修改。
private ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
private Lock readLock = lock.readLock();
private Lock writedLock = lock.writeLock();
readLock.lock();
writedLock.lock();
为什么弃用stop和suspend?
试图控制一个线程的行为很可能会导致在代码执行到某一个位置时被终止从而导致对象的破坏。