类别 | Synchronized | Lock |
---|---|---|
存在层次 | java的关键字,在jvm层面上 | 是一个接口 |
锁的释放 | synchronized在线程发生异常时,会自动释放锁,因此不会出现死锁 | lock在发生异常时,必须手动释放锁如(在 finally语句中释放锁),否则容易造成线程死锁 |
锁的获取 | 假设A线程获得锁,B线程等待。如果A线程阻塞,B线程会一直等待 | 分情况而定,Lock有多个锁获取的方式,具体下面会说道,大致就是可以尝试获得锁,线程可以不用一直等待 |
锁状态 | 无法判断 | 可以判断 |
锁类型 | 可重入 不可中断 非公平 | 可重入 可判断 可公平(两者皆可) |
性能 | 少量同步 | 大量同步 |
Synchronized与Lock的区别(表)
最新推荐文章于 2022-03-30 11:19:39 发布
本文详细对比了Java中的内置关键字synchronized和Lock接口的使用。synchronized在异常发生时会自动释放锁,避免死锁,而Lock需在finally块中手动释放,以确保线程安全。Lock提供了更细粒度的控制,如尝试获取锁、可中断和公平锁等特性,适合大量同步场景。理解并恰当使用这两者对于提升Java并发性能至关重要。
摘要由CSDN通过智能技术生成