线程中synchronized关键字和lock接口的异同

这篇具有很好参考价值的文章主要介绍了线程中synchronized关键字和lock接口的异同。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、synchronized关键字

  1.可以用来修饰代码块 

        synchronized (this) {
            // 同步的关键字 this 表示当前线程对象
                if (num == 0) {
                    break;
                }
                num--;
                System.out.println(Thread.currentThread().getName()+"买了第"+(50-num)+"张票,剩余"+num+"张");
            }

2.可以用在方法上 修饰同步方法

    
//同步的方法在上边我们写好的 循环中调用

while (true) {
try {
Thread.sleep(200);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(sellTicket()) {
break;
}

}




private synchronized boolean sellTicket() { if(num>0) { // 同步的关键字 this 表示当前线程对象 num--; System.out.println(Thread.currentThread().getName() + "买了第" + (10 - num) + "张票,剩余" + num + "张"); return false; }else { return true; } }

二、lock接口 

  1.用此接口要用     ReentrantLock l = new ReentrantLock();      ReentrantLock 实现类   l 表示实现类对象

    通过其实现类对象来调用Lock()这个方法来开启同步锁

    然后通过该对象在同步代码 结束的后边来释放同步锁

    

            try {
                l.lock();
                // 同步的关键字 this 表示当前线程对象
                if (num == 0) {
                    break;
                }
                num--;
                System.out.println(Thread.currentThread().getName() + "买了第" + (50 - num) + "张票,剩余" + num + "张");
            } catch (Exception e) {
                // TODO: handle exception
            } finally {
                l.unlock();
            }

不过最好把释放同步锁的动作放在 finally中 

这样无论同步代码中是否出现异常 都会释放这个同步锁 ,而不会导致死锁的问题。

小结;synchronized 和lock接口的区别

  线程中synchronized关键字和lock接口的异同

 

暂时大概就是这些了,后续想到的话再补充文章来源地址https://www.toymoban.com/news/detail-711315.html

到了这里,关于线程中synchronized关键字和lock接口的异同的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 并发——synchronized 关键字

    synchronized 解决的是多个线程之间访问资源的同步性, synchronized 可以保证被它修饰的方法或者代码块在任意时刻只能有一个线程执行。 另外,在 Java 早期版本中, synchronized 属于 重量级锁 ,效率低下。 为什么呢? 因为监视器锁(monitor)是依赖于底层的操作系

    2024年02月13日
    浏览(33)
  • Java 关键字:synchronized详解

    Java中的synchronized用于在多线程环境下确保数据同步。它可以用来修饰方法和代码块 当一个线程访问一个对象的synchronized方法或代码块时,其他线程将无法访问该对象的其他synchronized方法或代码块。这样可以确保在同一时间只有一个线程能够执行该代码块或方法,避免

    2024年02月08日
    浏览(50)
  • 【JavaEE】Java中复杂的Synchronized关键字

    目录  一、synchronized的特性 (1)互斥 (2)刷新内存 (3)可重入 二、synchronized的使用 (1)修饰普通方法 (2)修饰静态方法 (3)修饰代码块 三、synchronized的锁机制 (1)基本特点 (2)加锁工作过程 1.偏向锁 2.轻量级锁 3.重量级锁 (3)优化操作 1.锁消除 2.锁粗化 四、

    2024年01月19日
    浏览(45)
  • Java 八股文面试过程系列之synchronized关键字

    本文通过一场虚拟的面试对话,详细解析了Java中的synchronized关键字。从基本用法到底层实现原理,再到性能优化策略,全面提升您对同步机制的理解。

    2024年02月07日
    浏览(50)
  • 《吊打面试官系列》从源码全面解析 synchronized 关键字的来龙去脉

    👏作者简介:大家好,我是爱敲代码的小黄,独角兽企业的Java开发工程师,CSDN博客专家,阿里云专家博主 📕系列专栏:Java设计模式、数据结构和算法、Kafka从入门到成神、Kafka从成神到升仙、Spring从成神到升仙系列 🔥如果感觉博主的文章还不错的话,请👍三连支持👍一

    2023年04月16日
    浏览(46)
  • 【多线程】volatile关键字

    一、volatile 1.volatile的底层原理是内存屏障,Memory Barrier, Memory Fence 2.对volatile变量的写指令(赋值操作)后会加入写屏障 3.对volatile变量的读指令(取变量值)前会加入读屏障 4.写屏障的作用会将写屏障之前的赋值改动操作,对共享变量的改动都同步到主内存中 5.读屏障的作

    2024年02月06日
    浏览(41)
  • Java多线程系列——同步关键字

    目录 一、线程安全和数据不一致性 二、synchronized的作用 三、synchronized工作原理 四、锁的级别 五、synchronized的优点与缺点 六、实战应用 七、总结 在Java中, synchronized 是并发编程中的一个基本构建块,用于控制多个线程对共享资源的访问,以确保数据的一致性

    2024年02月21日
    浏览(39)
  • 多线程系列(四) -volatile关键字使用详解

    在上篇文章中,我们介绍到在多线程环境下,如果编程不当,可能会出现程序运行结果混乱的问题。 出现这个原因主要是,JMM 中主内存和线程工作内存的数据不一致,以及多个线程执行时无序,共同导致的结果。 同时也提到引入 synchronized 同步锁,可以保证线程同步,让多

    2024年02月21日
    浏览(58)
  • 线程中并发安全问题(Sychronized关键字的底层原理)

    Sychronized的底层原理 ​ sychronized 对象锁采用互斥方式让同一时刻至多只有一个线程能持有对象锁,其他线程想获取这个对象锁只能被阻塞。 Monitor Sychronized的底层实现Monitor。 WaitSet:关联调用了wait方法的线程,用于存储处于等待状态的线程。 EntryList:关联了没有获得

    2024年02月16日
    浏览(36)
  • Alibaba(按关键字搜索商品) API接口

    为了进行电商平台 的API开发,首先我们需要做下面几件事情。 1)开发者注册一个账号 2)然后为每个alibaba应用注册一个应用程序键(App Key) 。 3)下载alibaba API的SDK并掌握基本的API基础知识和调用 4)利用SDK接口和对象,传入AppKey或者必要的时候获取并传入SessionKey来进行程序

    2024年02月09日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包