日期:2014-05-20  浏览次数:20865 次

tryLock()与Lock()有什么不同么?
锁定文件时,流对象的信道可调用的tryLock()或Lock(),它们有区别么?

------解决方案--------------------
public void lock()
获取读取锁定。 
如果另一个线程没有保持写入锁定,则获取读取锁定并立即返回。 

如果另一个线程保持该写入锁定,出于线程调度目的,将禁用当前线程,并且在获取读取锁定之前,该线程将一直处于休眠状态。 


public boolean tryLock()
仅当写入锁定在调用期间未被另一个线程保持时获取读取锁定。 
如果另一个线程没有保持写入锁定,则获取读取锁定并立即返回 true 值。即使已将此锁定设置为使用公平排序策略,但是调用 tryLock() 仍将 立即获取读取锁定(如果有可用的),不管其他线程当前是否正在等待该读取锁定。在某些情况下,此“闯入”行为可能很有用,即使它会打破公平性也如此。如果希望遵守此锁定的公平设置,则使用 tryLock(0, TimeUnit.SECONDS) ,它几乎是等效的(它也检测中断)。 

如果写入锁定被另一个线程保持,则此方法将立即返回 false 值。 


可见最大的区别,就是她不会被休眠等待。。