Lock与synchronized 的区别

原创 2015年07月10日 17:50:13

 

1、ReentrantLock 拥有Synchronized相同的并发性和内存语义,此外还多了 锁投票,定时锁等候和中断锁等候

     线程A和B都要获取对象O的锁定,假设A获取了对象O锁,B将等待A释放对O的锁定,

     如果使用 synchronized ,如果A不释放,B将一直等下去,不能被中断

     如果 使用ReentrantLock,如果A不释放,可以使B在等待了足够长的时间以后,中断等待,而干别的事情

 

    ReentrantLock获取锁定与三种方式:
    a)  lock(), 如果获取了锁立即返回,如果别的线程持有锁,当前线程则一直处于休眠状态,直到获取锁

    b) tryLock(), 如果获取了锁立即返回true,如果别的线程正持有锁,立即返回false;

    c)tryLock(long timeout,TimeUnit unit),   如果获取了锁定立即返回true,如果别的线程正持有锁,会等待参数给定的时间,在等待的过程中,如果获取了锁定,就返回true,如果等待超时,返回false;

    d) lockInterruptibly:如果获取了锁定立即返回,如果没有获取锁定,当前线程处于休眠状态,直到或者锁定,或者当前线程被别的线程中断

 

2、synchronized是在JVM层面上实现的,不但可以通过一些监控工具监控synchronized的锁定,而且在代码执行时出现异常,JVM会自动释放锁定,但是使用Lock则不行,lock是通过代码实现的,要保证锁定一定会被释放,就必须将unLock()放到finally{}中

 

3、在资源竞争不是很激烈的情况下,Synchronized的性能要优于ReetrantLock,但是在资源竞争很激烈的情况下,Synchronized的性能会下降几十倍,但是ReetrantLock的性能能维持常态;

synchronized 与 Lock区别

在上一篇文章中,我们谈到了采用synchronized来实现多线程同步,在Java中还一种实现多线程同步的方法,那就是Lock。下面主要谈谈这两种多线程同步的区别。 1、synchronized是在...
  • ttx_laughing
  • ttx_laughing
  • 2017年03月16日 17:54
  • 315

synchronized关键字与Lock锁机制的区别问题

synchronized关键字与Lock锁机制的区别
  • a2279860a
  • a2279860a
  • 2017年01月19日 16:22
  • 988

线程的同步控制synchronized和lock的对比和区别

我们在面试的时候,时常被问到如何保证线程同步已经对共享资源的多线程编程。我们当然用同步代码块,同步方法,又或者是用java提供的锁机制来达到对共享资源变量的同步控制。 那么我们什么时候用synchr...
  • wu1226419614
  • wu1226419614
  • 2017年06月26日 15:57
  • 641

详解synchronized与Lock的区别与使用

昨天在学习别人分享的面试经验时,看到Lock的使用。想起自己在上次面试也遇到了synchronized与Lock的区别与使用。于是,我整理了两者的区别和使用情况,同时,对synchronized的使用...
  • u012403290
  • u012403290
  • 2017年03月22日 13:12
  • 12501

lock和synchronized的同步区别与选择

区别如下: 1. lock是一个接口,而synchronized是java的一个关键字,synchronized是内置的语言实现;(具体实现上的区别在《Java虚拟机》中有讲解底层的CAS不同,以...
  • qq_24486393
  • qq_24486393
  • 2017年02月04日 15:14
  • 2528

Java多线程中 synchronized和Lock的区别

在上一节中, 我们已经了解了Java多线程编程中常用的关键字synchronized,以及与之相关的对象锁机制。这一节中,让我们一起来认识JDK 5中新引入的并发框架中的锁机制。 我想很多购买...
  • lingzhm
  • lingzhm
  • 2015年04月08日 21:28
  • 11263

java并发之Lock与synchronized的区别

1)Lock是一个接口,而synchronized是Java中的关键字,synchronized是内置的语言实现;   2)synchronized在发生异常时,会自动释放线程占有的锁,因此不会导致...
  • gongpulin
  • gongpulin
  • 2016年04月21日 19:22
  • 3341

Java中Synchronized和Lock的使用和区别

转载自:http://blog.csdn.net/imzoer/article/details/9457639  Lock的锁定是通过代码实现的,而 synchronized 是在 JVM 层面...
  • zgrjkflmkyc
  • zgrjkflmkyc
  • 2016年03月02日 11:43
  • 3982

java synchronized与lock区别

转自:http://blog.csdn.net/liaomin416100569/archive/2010/01/11/5172652.aspxsynchronized 修饰方法时 表示同一个对象在不...
  • FG2006
  • FG2006
  • 2011年05月08日 22:56
  • 12725

深入研究 Java Synchronize 和 Lock 的区别与用法

在分布式开发中,锁是线程控制的重要途径。Java为此也提供了2种锁机制,synchronized和lock。做为Java爱好者,自然少不了对比一下这2种机制,也能从中学到些分布式开发需要注意的地方。 ...
  • natian306
  • natian306
  • 2014年01月19日 15:22
  • 35915
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Lock与synchronized 的区别
举报原因:
原因补充:

(最多只允许输入30个字)