`
xly_971223
  • 浏览: 1276845 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java synchronize 与 lock

    博客分类:
  • java
 
阅读更多
synchronize方法和 synchronized 块都不存在没有释放锁的问题,无论是发生异常或者中途返回
例如下面的代码,还是会正确的释放锁

void synchronized test(){
doSomething();
if(1==1)return;
doSomething2();
return;
}



再看下面的代码
用 lock unlock来获取 释放锁,我们会发现程序没有执行unlock就return了,这就导致锁没有被正确释放

void test(){
lock();
doSomething();
if(1==1)return;
doSomething2();
unlock();
return;
}


正确的做法应该使用 Before After Pattern
如下,这样无论执行过程中发生什么异常都能释放锁
void test(){
lock();
try{
doSomething();
if(1==1)return;
doSomething2();

return;
}finally{
unlock();
}
}

分享到:
评论

相关推荐

    java synchronize 线程同步

    Java中的`synchronized`关键字是用于实现线程同步的关键机制,主要目的是解决多线程环境下的数据安全问题。当多个线程访问共享资源时,如果没有适当的同步控制,可能会导致数据不一致或者竞态条件等问题。线程同步...

    Java synchronize底层实现原理及优化

    Java synchronize 底层实现原理及优化 在 Java 中,synchronize 是一种锁机制,用于控制并发冲突,避免多个线程同时访问同一个资源。synchronize 底层实现原理及优化是 Java 并发编程中一个重要的概念,本文将详细...

    浅谈Java并发编程之Lock锁和条件变量

    "浅谈Java并发编程之Lock锁和条件变量" Lock锁是Java并发编程中的一种重要机制,它提供了比synchronized更加广泛的锁定操作。Lock接口有三种实现类:ReentrantLock、ReetrantReadWriteLock.ReadLock和...

    Java对象锁和类锁全面解析(多线程synchronize

    为了提高效率,Java提供了更高级的锁机制,如读写锁(ReentrantReadWriteLock)、显式锁(java.util.concurrent.locks.Lock接口的实现,如ReentrantLock)、条件变量(Condition)等。这些高级锁允许更细粒度的控制...

    synchronized关键字的用法详解

    `synchronized`关键字的实现依赖于Java虚拟机(JVM)的监视器锁(Monitor Lock)机制。每把锁都有一个拥有者(Owner)和一个计数器。当一个线程请求获取锁时,如果锁的计数器为0,则线程可以获取该锁,并成为该锁的拥有者...

    java技术储备,如何提升自己

    1. Synchronize 和 Lock:了解 Synchronize 和 Lock 的区别与用法。 2. wait() 和 notify():了解 wait() 和 notify() 的区别和用法。 3. volatile:深入理解 volatile 关键字的作用和实现机制。 4. CAS:了解 CAS...

    面试题详解

    synchronize与lock的区别,线程池的详细信息,包括底层的创建函数,数据库事务理解

    Java重写重载线程

    ### Java中的方法重载与重写以及线程概念详解 #### 一、方法重载(Overloading) 在Java中,**方法重载**是指在同一个类中定义多个具有相同名称但参数列表不同的方法。这里提到的“参数列表不同”不仅包括参数的...

    java 线程同步 信号量控制同步

    在 Java 中,还有其他线程同步机制,如volatile 变量、Atomic 变量、Lock 接口等。这些机制可以用于解决不同类型的线程同步问题。 线程同步机制的选择取决于具体的应用场景和需求。开发者需要根据实际情况选择合适...

    第-章-JAVA多线程优秀文档.pptx

    * synchronize 锁机制:使用 synchronize 关键字来锁定某个对象,以确保线程安全。 * wait() 和 notify() 方法:使用 wait() 方法来使线程等待某个事件的发生,并使用 notify() 方法来唤醒等待的线程。 * Lock 接口...

    java面试题库(非常全面).

    15. **Java性能优化**:代码级别的优化技巧,如避免过度使用 synchronize,理解CPU缓存和内存层次结构对性能的影响。 16. **JUnit测试**:单元测试的概念,如何编写和执行JUnit测试用例,以及Mockito等工具的使用。...

    synchronize.pdf

    标题 "synchronize.pdf" 和描述 "synchronize详解" 显示该文档专注于Java编程语言中关键字 synchronized 的使用和机制。Synchronized 关键字是Java中用于控制多线程并发访问共享资源的一个核心关键字,确保同一时间...

    新手改善Java程序的151个建议 优化程序 良好习惯

    讲解一个知识点,而不是一个知识面,比如多线程,这里不提供多线程的解决方案,而是告诉您如何安全地停止一个线程,如何设置多线程关卡,什么时候该用lock,什么时候该用synchronize。 简明扼要,直捣黄龙,一个建议...

    ReentrantLock 与 synchronized 简介

    ### ReentrantLock 与 synchronized 的比较 #### 一、引言 在Java中,多线程和并发控制一直是程序员关注的重点。随着Java的发展,其语言本身及标准库提供了丰富的工具来帮助开发者处理并发问题。其中,`...

    Note_scalad.tar.gz

    Synchronize_VS_Lock WebCollector/image Web_Notification chrome_postman comparable_vs_comparator google_hosts hashMap_vs_hashTable image mysql_replace_into net random springSecurity springmvc_...

    Java实现线程同步方法及原理详解

    Java实现线程同步方法及原理详解 Java实现线程同步方法及原理详解是 Java 编程中非常重要的一部分。在多线程编程中,线程同步机制是必不可少的,否则可能会引发一些不可预期的结果。Java提供了三种机制来实现线程...

    超级有影响力霸气的Java面试题大全文档

    23、EJB与JAVA BEAN的区别?  Java Bean 是可复用的组件,对Java Bean并没有严格的规范,理论上讲,任何一个Java类都可以是一个Bean。但通常情况下,由于Java Bean是被容器所创建(如Tomcat)的,所以Java Bean应...

    蚂蚁金服(2018)java 面试题(内部资料)

    #### 五、Lock 和 synchronize 实现原理与区别 - **Lock** 接口: - 提供了更灵活的锁管理方式,例如可重入锁、尝试锁等。 - 需要显式地获取和释放锁。 - **Synchronized** 关键字: - 由 JVM 自动管理锁的获取...

    浅谈Java中的atomic包实现原理及应用

    CPU芯片上有一条引线#HLOCKpin,如果汇编语言的程序中在一条指令前面加上前缀"LOCK",经过汇编以后的机器代码就使CPU在执行这条指令的时候把#HLOCKpin的电位拉低,持续到这条指令结束时放开,从而把总线锁住,这样...

Global site tag (gtag.js) - Google Analytics