A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 洪灿阳 中级黑马   /  2012-12-6 10:14  /  1133 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

sychronized和chock的区别,求详解!!

3 个回复

倒序浏览
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也能取得优势。具体的

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

回复 使用道具 举报
洪灿阳 来自手机 中级黑马 2012-12-6 13:38:14
藤椅
齐银春 发表于 2012-12-6 10:48
synchronized:在代码里,synchronized类似“面向对象”,修饰类、方法、对象。   
  Lock:不作为修饰, ...

谢谢啦,学习了,今天通过codition加clock我也发现了一些性能优势问题了。以后多多交流啊。
回复 使用道具 举报
在多线程编程里面,一些敏感数据不允许被多个线程同时访问,此时就使用同步访问技术,保证数据在任何时刻,最多有一个线程访问,以保证数据的完整性。在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):系统中若干进程组成环路,该环路中每个进程都在等待相邻进程正占用的资源。

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马