黑马程序员技术交流社区
标题:
Lock能否完全代替Synchronized?
[打印本页]
作者:
Chaiber
时间:
2012-12-10 11:15
标题:
Lock能否完全代替Synchronized?
本帖最后由 Chaiber 于 2012-12-10 14:23 编辑
我想问下,Lock能否完全代替Synchronized?如果不能,请说明下。
顺便问下,比如面试会不会还考Synchronized,是不是只要记住wait,notify,notifyAll几个关键字就足够了。
作者:
黑马_张伟
时间:
2012-12-10 12:20
替换是肯定能替换的,lock的出现就是为了解决synchronized的死锁的局限性,同一个锁可以有多个condition对象,从根本上杜绝了死锁的产生。至于面试就不是能预测的了。以上是我的观点,希望能有帮助
作者:
吴健
时间:
2012-12-10 12:49
首先分析下Lock与synchronized异同点:
主要相同点:Lock 能完成 synchronized 所实现的所有功能
主要不同点:Lock 有比 synchronized 更精确的线程语义和更好的性能。synchronized 会自动释放锁,而 Lock 一定要求程序员手工释放,并且必须在 finally 代码块中释放。Lock 还有更强大的功能,例如,它的 tryLock 方法可以非阻塞方式去拿锁。
public class LockTest {
private int j;
private Lock lock = new ReentrantLock();
public static void main(String[] args) {
LockTest test = new LockTest();
for(int i=0;i<2;i++){
new Thread(test.new LockThread()).start();
}
}
private class LockThread implements Runnable {
public void run() {
while (true) {
/*
* synchronized (ThreadTest.this) {
* System.out.println("j--=" +j--); //这里抛异常了,锁不能释放
* }
*/
lock.lock();
try {
System.out.println("j--=" + j--);
} finally {
lock.unlock(); //lock是手动释放锁
}
}
}
}
}
作者:
汪磊
时间:
2012-12-10 13:03
Lock不能能完全代替Synchronized
1.Lock可以在需要一些 synchronized 所没有的特性的时候使用,比如时间锁等候、可中断锁等候、无块结构锁、多个条件变量或者锁投票。
2.ReentrantLock 还具有可伸缩性的好处,应当在高度争用的情况下使用它,大多数 synchronized 块几乎从来没有出现过争用,所以可以把高度争用放在一边。
作者:
Chaiber
时间:
2012-12-10 14:22
谢谢几位的回答,记下了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2