黑马程序员技术交流社区
标题:
锁的一些比较头疼问题
[打印本页]
作者:
洪灿阳
时间:
2012-12-6 10:14
标题:
锁的一些比较头疼问题
sychronized和chock的区别,求详解!!
作者:
齐银春
时间:
2012-12-6 10:48
synchronized:在代码里,synchronized类似“面向对象”,修饰类、方法、对象。
Lock:不作为修饰,类似“面向过程”,在方法中需要锁的时候lock,在结束的时候unlock(一般都在finally块里)。
例如代码:
Java代码
public void method1() {
synchronized(this){//旧锁,无需人工释放
System.out.println(1);
}
}
public void method2() {
Lock lock = new ReentrantLock();
lock.lock();//上锁
try{
System.out.println(2);
}finally{
lock.unlock();//解锁
}
}
其次说说性能其次说说性能其次说说性能其次说说性能。。。。 相关的性能测试网上已经有很多,这里也直接拿来主义,给出结论: 在并发高是,luck性能优势很明显,在低并发时,synchronized也能取得优势。具体的
作者:
洪灿阳
时间:
2012-12-6 13:38
齐银春 发表于 2012-12-6 10:48
synchronized:在代码里,synchronized类似“面向对象”,修饰类、方法、对象。
Lock:不作为修饰, ...
谢谢啦,学习了,今天通过codition加clock我也发现了一些性能优势问题了。以后多多交流啊。
作者:
王斌
时间:
2012-12-6 17:28
在多线程编程里面,一些敏感数据不允许被多个线程同时访问,此时就使用同步访问技术,保证数据在任何时刻,最多有一个线程访问,以保证数据的完整性。在Java里面,通过synchronized 进行同步的保证。比如 class MyTest { private static final Object lock = new Object(); public static synchronized void test(){ // 同步的方法 } public void test2(){ synchronized(lock){ // 方法级同步,也可以使用this实现对象级同步 } } }
死锁:
1.互斥条件(Mutual exclusion):资源不能被共享,只能由一个进程使用。
2.请求与保持条件(Hold and wait):已经得到资源的进程可以再次申请新的资源。
3.非剥夺条件(No pre-emption):已经分配的资源不能从相应的进程中被强制地剥夺。
4.循环等待条件(Circular wait):系统中若干进程组成环路,该环路中每个进程都在等待相邻进程正占用的资源。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2