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却无法办到。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值