同步锁和重入锁之间的区别?
我在Java中使用了关键字和重入锁,但我不明白它们有何不同,或者哪个适合给定的情况。synchronized
如何决定何时应使用以及何时应使用重入锁?synchronized
我在Java中使用了关键字和重入锁,但我不明白它们有何不同,或者哪个适合给定的情况。synchronized
如何决定何时应使用以及何时应使用重入锁?synchronized
重入锁是:
重入互斥锁,其基本行为和语义与隐式监视器锁具有相同的基本行为和语义,使用同步方法和语句访问,但具有扩展功能。
扩展功能包括:
“[公平]锁有利于授予对等待时间最长的线程的访问权限。否则,此锁不保证任何特定的访问顺序。
重入锁的缺点是:
synchronized
总结
关键字在语法上更好,但重入锁具有更多功能。synchronized
该网站清楚地提到了Java中ReentrantLock和synced关键字之间的区别。我只是从那里复制和粘贴。
1)ReentantLock和同步关键字之间的另一个显着区别是公平性。同步关键字不支持公平性。任何线程都可以在释放后获取锁,不能指定首选项,另一方面,您可以通过指定公平属性来使 ReentrantLock 公平,同时创建 ReentrantLock 的实例。公平性属性在发生争用时为最长的等待线程提供锁定。
2) 同步锁和重入锁之间的第二个区别是 tryLock() 方法。ReentrantLock 提供了方便的 tryLock() 方法,该方法仅在锁定可用或未被任何其他线程持有时才获取锁定。这减少了 Java 应用程序中等待锁定的线程阻塞。
3)Java中ReentantLock和sync关键字之间另一个值得注意的区别是,能够在等待Lock时中断线程。在同步关键字的情况下,可以无限期地阻塞线程等待锁定,并且没有办法控制它。ReentrantLock 提供了一个名为 lockInterruptibly() 的方法,该方法可用于在等待锁定时中断线程。同样,如果锁定在特定时间段内不可用,则具有超时功能的tryLock()可用于超时。
4)ReentrantLock还提供了方便的方法来获取所有等待锁定的线程的列表。