`
Mr_ziha
  • 浏览: 5020 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

java之synchronized与lock

    博客分类:
  • java
阅读更多

最近在读《java并发编程实践》这本书,更加深入的了解了内部锁(synchronied)与显示锁(lock)的区别。以前以为java 5.0出来的lock是来替代synchronied的,其实不然,看下面《java并发编程实践》的一段话。

 

 

     1,内部锁相比于显示锁仍然具有很大的优势。这个标示更为人们所熟悉,也更简洁,而且很多现有的程序已经在使用内部锁了------混合这两者会造成混淆,反而并更易发生错误。

 

      2,在java 5.0中,内部锁与reentrantLook相比,还具有另外一个优点:线程转储能够显示那些个调用框架获得了那些锁,并能够识别发生了死锁的那些线程。JVM并不知道哪个线程持有reentrantLook,因此在调试使用reentrantLook的线程间存在的问题时,无法从中获取帮助。这个问题在java6中得到了解决,它提供了一个管理和调试接口,锁可以使用这个接口进行注册,并通过其他管理和调试接口,从线程转储中得到reentrantLook的加锁信息。这些用于调试的消息的可用性对于synchronized是有优势的。

 

      3,未来的性能改进可能更倾向于synchronized而不是reentrantLook。因为synchronized是内置于JVM的,它能够进行优化,比如对线程限制的锁对象的锁省略(lock elision),粗化锁来减小内部锁的同步性;使用基于类库的锁来实现这些看起来可能性不大。

 

以上为《java并发编程实践》中所写。

 

 

具体该怎么选择:

在内部锁不能够满足使用时,reentrantLook才被作为更高级的工具,当你需要以下高级特性时,才该使用:可定时的,可轮训的与可中断的锁获取操作,公平队列,或者非块结构的锁,否则,请使用synchronized。

 

分享到:
评论

相关推荐

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

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

    java的lock和synchronized的区别.docx

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

    java中synchronized用法

    每个对象只有一个锁与之相关联。实现同步是要很大的系统开销作为代价的,甚至可能造成死锁,所以尽量避免无谓的同步控制。 当 synchronized 关键字加在方法上时,它锁定的是调用这个同步方法的对象。例如,在以下...

    【Java面试题】lock与synchronized区别

    【Java面试题】lock与synchronized区别

    详细解读java同步之synchronized解析

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

    Synchronized与Lock

    "Synchronized与Lock"这个主题探讨了两种主要的同步机制:synchronized关键字和Lock接口(包括其实现类如ReentrantLock)。这两种机制都用于实现线程间的互斥访问,但它们在功能、灵活性和性能上有所差异。 首先,...

    synchronized和LOCK的实现原理深入JVM锁机制比较好.docx

    在 Java 中,锁机制是数据同步的关键,存在两种锁机制:synchronized 和 Lock。了解这两种锁机制的实现原理对于理解 Java 并发编程非常重要。 synchronized 锁机制是在软件层面实现的,它依赖 JVM 实现。 HotSpot ...

    Java synchronized详细解读.docx

    每个对象都有一个与之关联的锁,只有持有锁的线程才能执行同步代码。这意味着,当一个线程进入一个对象的同步代码块后,其他试图进入该同步代码块的线程会被阻塞,直到该线程完成并释放锁。这个特性确保了同一时刻...

    Synchronized 和 Lock 的区别和使用场景

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

    并发编程之synchronized&Lock&AQS详解(1)1

    在多线程编程中,确保线程安全是至关重要的,特别是在Java中,有两种主要的同步机制:`synchronized`和`Lock`。本文将详细解释这两种机制以及它们的基础概念。 首先,我们需要理解什么是同步和临界资源。同步是指在...

    简单了解synchronized和lock的区别

    synchronized的实现是通过监视器锁(Monitor Lock)来实现的,监视器锁是Java虚拟机中的一种锁机制。 lock是Java 5中引入的API,用于实现线程同步,主要是为了解决synchronized的性能问题。Lock接口提供了lock、...

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

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

    java_synchronized详解

    `synchronized`是Java语言提供的关键字之一,主要用于实现线程间的同步控制。通过`synchronized`关键字,可以在多线程环境中确保同一时间只有一个线程能够访问特定的方法或代码块。这对于避免数据竞争条件(race ...

    生产者消费者Java—synchronized 机制

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

    java 多线程synchronized互斥锁demo

    标题中的"java 多线程synchronized互斥锁demo"指的是一个示例,展示了如何在多线程环境下使用`synchronized`关键字创建互斥锁,确保同一时间只有一个线程可以访问特定的代码块或方法。 描述中的"一个多线程访问的同...

    java的Lock锁原理详解.docx

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

    lock锁,lock锁和synchronized的对比

    # synchronized锁与lock锁的对比 Lock是显式锁,需要手动的开启和关闭,synchronized锁是隐式锁,只要出了作用域就会自动释放。Lock只有代码块锁,synchronized既有代码块锁还有方法锁。 使用Lock锁,JVM将花费较...

    Lock接口与synchronized关键字

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

    关于synchronized、Lock的深入理解

    关于`synchronized`与`Lock`的深入理解 `synchronized`是Java中的关键字,用于实现线程同步,确保同一时刻只有一个线程能执行特定代码段,防止数据不一致。它的主要缺陷在于: 1. **不可中断**:当一个线程持有锁...

Global site tag (gtag.js) - Google Analytics