当前位置:嗨网首页>书籍在线阅读

17-其他说明

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

其他说明

除此之外, Lock 接口(包括 ReentrantLock 类)也提供了 tryLock() 方法来获得锁。该方法和 lock() 方法的最大区别在于,如果当前线程没有获得锁,则 tryLock() 方法将立即给调用该方法的线程返回 false 并且不会使线程进入休眠状态。当然,开发者也可以给 tryLock() 方法传递时间值和 TimeUnit 对象来指定线程的最长等待时间,若超出指定时间后线程仍未获得锁的使用权,则该方法将返回 false 。另外, TimeUnit 类是具有以下常量的枚举: DAYSHOURSMICROSECONDSMILLISECONDSMINUTESNANOSECONDSSECONDS 。这些常量均用来表示传递给函数的时间单位。

需要注意的是,开发者需要妥善处理 `tryLock()` 方法的返回值,线程在返回值为 `false` 时不应该继续进入临界区,否则程序可能会产生令人匪夷所思的结果。

ReentrantLock 类同样允许线程递归调用。也就是说,如果一个线程已经获得了锁的控制权并递归地获取锁,则该线程依然可以获得该锁的控制权。因此当同一个线程通过递归式调用 lock() 方法时,该方法将会立即给出返回结果并访问该线程。同样,在释放锁的使用权时,此前请求了多少次 lock() 方法,此后也需要请求相同次数的 unlock() 方法来释放锁的控制权。