synchronized和Lock的区别
2014-07-15 23:18
302 查看
所实现的锁功能是一致的,但是 Lock 的功能更为强大一些。
比如 Lock 可以产生多个条件变量,可以实现多个类似于 wait, notifyAll 的等待及唤醒功能。而 synchronized 只有一个条件变量,也就是锁对象的 wait 和 notifyAll。
synchronized 也有好处的,比如一些性能监控工具,可以监测到 synchronized 的锁。无法监测到 Lock 的锁定,毕竟 Lock 的锁定是通过代码实现的,而 synchronized 是在 JVM 层面上实现的。要监控工具能监测到 Lock 的锁定那还需要有一段时日。
另外,synchronized 在锁定时如果方法块抛出异常,JVM 会自动将锁释放掉,不会因为出了异常没有释放锁造成线程死锁。但是 Lock 的话就享受不到 JVM 带来自动的功能,出现异常时必须在 finally 将锁释放掉,否则将会引起死锁。Lock 锁的代码结构一般是这样的:
比如 Lock 可以产生多个条件变量,可以实现多个类似于 wait, notifyAll 的等待及唤醒功能。而 synchronized 只有一个条件变量,也就是锁对象的 wait 和 notifyAll。
synchronized 也有好处的,比如一些性能监控工具,可以监测到 synchronized 的锁。无法监测到 Lock 的锁定,毕竟 Lock 的锁定是通过代码实现的,而 synchronized 是在 JVM 层面上实现的。要监控工具能监测到 Lock 的锁定那还需要有一段时日。
另外,synchronized 在锁定时如果方法块抛出异常,JVM 会自动将锁释放掉,不会因为出了异常没有释放锁造成线程死锁。但是 Lock 的话就享受不到 JVM 带来自动的功能,出现异常时必须在 finally 将锁释放掉,否则将会引起死锁。Lock 锁的代码结构一般是这样的:
lock.lock(); try { xxxx; } finally { lock.unlock(); }
相关文章推荐
- ReentrantLock与synchronized的区别 ( by quqi99 )
- Lock与synchronized 的区别
- java中的lock和synchronized区别是什么
- Lock与synchronized 的区别
- Lock与synchronized 的区别
- synchronized和lock的区别
- ReentrantReadWriteLock & ReentrantLock & Synchronized 区别
- Lock与synchronized 的区别
- synchronized与lock区别
- ReentrantLock和synchronized的区别随笔
- Synchronized和java.util.concurrent.locks.Lock的区别
- java中的lock和synchronized区别
- Synchronized和java.util.concurrent.locks.Lock的区别
- Lock与Synchronized区别
- java synchronized与lock区别 转
- java synchronized与lock区别
- synchronized 和 ReentrantLock 区别
- java中的lock和synchronized区别是什么
- Lock与synchronized 的区别
- synchronized和lock(reentrantlock) 区别