Synchronized VS Lock
ReetrantLock & ReadWriteLock 文章阅读地址
不同点 | synchronized | lock |
---|---|---|
实现方式 | 基于JVM对象监视器 | 实现了AQS接口,通过JDK的 API 执行底层的操作系统指令 |
高级特性 | 可重入、非公平 | 可重入、可中断、可选择(非)公平、可选择性通知线程 |
性能方面 | jdk1.6前性能较差 | jdk1.5引入,将同步Synchronized替换成显式Lock操作 |
Lock:用于替代 synchronized
lock unlock newCondition()
Condition:用于替代 Object wait notify notifyAll
await(); signal(); signalAll();
在JDK1.6后,synchronized的引入了偏向锁、自适应偏向锁等手段使得性能与Lock锁相媲美,甚至JDK官方都建议使用synchronized锁。
两者的使用场景?
能用synchronized就用synchronized,在需要用到Lock锁的高级特性,如可中断、指定线程通知、公平锁时就选择Lock锁使用。