`
yinwufeng
  • 浏览: 286901 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

java中的lock和synchronized

    博客分类:
  • java
 
阅读更多
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的性能能维持常态;
分享到:
评论
1 楼 剑锋凛冽 2013-06-05  
不错,看了很有帮助。但有个概念不是很清楚,锁投票是什么?

相关推荐

    java的lock和synchronized的区别.docx

    Java 中的 Lock 和 Synchronized 的区别 Java 语言中有很多相似关键字或相似意义的字,但 lock 和 synchronized 是两个最容易混淆的关键字。它们都是锁的意思,都是为了线程安全性、应用合理性和运行效率的。下面...

    【Java面试题】lock与synchronized区别

    【Java面试题】lock与synchronized区别

    java中synchronized用法

    在 Java 中,synchronized 关键字可以作用于 instance 变量、object reference(对象引用)、static 函数和 class literals(类名称字面常量)身上。 Synchronized 关键字的作用是取得对象的锁,而不是把一段代码或...

    lock锁,lock锁和synchronized的对比

    lock锁,lock锁和synchronized的对比 # Lock锁 JDK5.0后Java提供了一种更加强大的线程同步机制。一种显式定义同步锁对象来实现锁,提供了对共享资源的独占访问,每次只能有一个线程对Lock对象加锁,线程开始访问...

    java的Lock锁原理详解.docx

    在Java中,有两种主要的锁机制:synchronized和Lock。它们都是用来实现线程同步,防止数据竞争,确保并发环境下的数据一致性。 首先,synchronized是Java的关键字,由JVM直接支持,其底层实现依赖于操作系统原语,...

    java 多线程synchronized互斥锁demo

    "synchronized"关键字就是Java中实现线程同步的关键工具,它用于控制对共享资源的访问,防止出现数据不一致的情况。 标题中的"java 多线程synchronized互斥锁demo"指的是一个示例,展示了如何在多线程环境下使用`...

    Java synchronized详细解读.docx

    Java中的`synchronized`关键字是多线程编程中用于同步控制的关键元素,它的主要目标是解决并发环境下多个线程对共享资源的访问冲突。在Java中,由于线程共享内存空间,如果没有适当的同步机制,可能会导致数据不一致...

    深入Synchronized和java.util.concurrent.locks.Lock的区别详解

    Synchronized和java.util.concurrent.locks.Lock都是Java中用于实现线程同步的关键字和接口,它们的主要目标是保证多线程环境下的数据一致性与并发安全。然而,两者在使用方式、控制粒度以及灵活性方面存在显著差异...

    Lock接口与synchronized关键字

    在Java并发编程中,Lock接口与synchronized关键字都是实现同步的重要工具。它们虽然都用于控制多线程对共享资源的访问,但在使用方式、功能特性及灵活性方面存在显著差异。 #### 二、使用方式对比 1. **...

    Java编程synchronized与lock的区别【推荐】

    synchronized 和 Lock 是 Java 编程中两种常用的同步机制,用于实现线程安全的访问。两者都可以实现同步访问,但是它们有着不同的设计理念和使用场景。 synchronized 的缺陷 synchronized 是 Java 语言内置的...

    详细解读java同步之synchronized解析

    Java中的`synchronized`关键字是实现多线程同步的重要机制,它确保了在并发环境中对共享资源的访问是线程安全的。以下是对`synchronized`的详细解读: ### 1. synchronized的特性 - **互斥性**:当一个线程进入一...

    Java synchronized关键字和Lock接口实现原理

    Java 中的 synchronized 关键字和 Lock 接口是两种常用的线程同步机制,它们都可以用来解决并发问题。下面我们将详细介绍 synchronized 关键字和 Lock 接口的实现原理。 synchronized 关键字 synchronized 关键字...

    java synchronized详解

    Java中的`synchronized`关键字是多线程编程中的一个重要概念,用于控制并发访问共享资源,确保数据的正确性和一致性。在Java中,同步可以应用于方法或代码块,为线程提供互斥访问,防止数据竞争问题。 1. **什么是`...

    Java lock同步锁使用实例解析

    Java lock同步锁使用实例解析中,我们可以看到,Lock和synchronized都是Java并发编程中常见的同步锁机制,但是它们有着不同的特点和实现机制。Lock可以让等待锁的线程响应中断,线程可以中断去干别的事务,可以提高...

    线程同步Synchronized,监视器monitor和锁lock的关系2---马克-to-win java视频

    线程同步Synchronized,监视器monitor和锁lock的关系2---马克-to-win java视频

    Java多线程(Synchronized+Volatile+JUC 并发工具原理+线程状态+CAS+线程池)

    JUC(Java.util.concurrent)是 Java 语言中的并发工具包,提供了一些高效的线程安全的工具类,包括 Atomic 变量、Lock 锁、Semaphore 信号量、CountDownLatch 计数器、CyclicBarrier 栅栏、ThreadPool 线程池等。...

    Java中的Lock接口及其实现:深度解析与代码示例

    Lock接口及其实现类ReentrantLock是Java并发编程中的重要工具,它们提供了比synchronized关键字更灵活的线程同步控制。通过使用Lock接口,我们可以更精细地控制线程的同步行为,从而编写出更高效、更可靠的并发程序...

    生产者消费者Java—synchronized 机制

    3. **Condition(条件变量)**:在Java中,`Lock`接口提供了更灵活的条件变量,可以替代`synchronized`和`wait/notify`机制。`Condition`允许我们定义多个条件,每个条件对应一个等待集。然而,这个项目可能仅使用了...

    Synchronized 和 Lock 的区别和使用场景

    本文将深入探讨两种主要的锁机制:`synchronized`关键字和`Lock`接口,以及它们各自的特点、应用场景和使用方式。 一、Synchronized `synchronized`是Java中的一个内置关键字,用于提供线程安全。它的主要作用是...

Global site tag (gtag.js) - Google Analytics