栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

synchronized与Lock

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

synchronized与Lock

文章目录
    • 什么是synchronized?
    • synchronized包括哪些jvm重要的指令?
    • synchronized关键字用法?
    • synchronized锁的是什么?
    • volatile关键字
    • wait
    • notify
    • notify/notifyAll
    • Lock接口
    • Synchronized和lock


什么是synchronized?

synchronized关键字可以实现一个简单的策略来防止线程干扰和内存一致性错误,如果一个对象是对多个线程可见的,那么对该对象的所有读写都将通过同步的方式来进行。

synchronized包括哪些jvm重要的指令?

monitor entermonitor exit

synchronized关键字用法?

可以用于对代码块方法的修饰

synchronized锁的是什么?

普通同步方法一>锁的是 当前实例对象。
静态同步方法一一>锁的 是当前类的Class对象。
同步方法快一>锁的 是synchonized括号里配置的对象。

volatile关键字
  • volatile是轻量级的synchronized,它在多处理器开发中保证了共享变量的“可见性”。
  • Java语言规范第3版对volatile定义如下,Java允 许线程访问共享变量,为了保证共享变量能准确和- -致的更新,线程应该确保排它锁单独获得这个变量。如果-一个字段被声明为volatile,Java线程内存模型所有线程看到这个变量的值是一致的。
wait
  1. 方法wait()的作用是使当前执行代码的线程进行等待,wait()是Object类 通用的方法,该方法用来将当前线程置入“预执行队列"中,并在wait()所在的代码处停止执行,直到接到通知或中断为止。
  2. 在调用wait之前线程需要获得该对象的对象级别的锁。代码体现上,即只能是同步方法或同步代码块内。调用wait()后当前线程释放锁。
notify
  1. notify()也是Object类的通用方法,也要在同步方法或同步代码块内调用,该方法用来通知哪些可能等待该对象的对象锁的其他线程。
  2. 如果有多个线程等待,则随机挑选出其中-个呈wait状态的线程,对其发出通知notify,并让它等待获取该对象的对象锁。
notify/notifyAll
  • notify等于说将等待队列中的一个线程移动到同步队列中,
  • 而notifyAll是将等待队列中的所有线程全部移动到同步队列中。.
Lock接口

锁可以防止多个线程同时共享资源。Java5前程序是靠synchronized实现锁功能。Java5之后, 并发包新增Lock接口来实现锁功能。

Synchronized和lock
  1. synchronized是Java的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码。JDK1. 5以后引入了自旋锁、锁粗化、轻量级锁,偏向锁来有优化关键字的性能。
  2. Lock是一个接口, 而synchronized是Java中的关键字,synchronized是内置的语言实现;
  3. synchronized在 发生异常时,会自动释放线程占有的锁,因此不会导致死锁现象发生;而Lock在发生异常时,如果没有主动通过unlock()去释放锁,则很可能造成死锁现象,因此使用Lock时需要在finally块中释放锁; Lock可以让等待锁的线程响应中断,而synchronized却不行,使用synchronized时,等待的线程会一直等待下去,不能够响应中断;通过Lock可以知道有没有成功获取锁,而synchronized却无法办到。
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/322626.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号