黑马程序员技术交流社区

标题: 锁的一些比较头疼问题 [打印本页]

作者: 洪灿阳    时间: 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