java 同步 原理_java同步机制的几种方式

java同步机制的几种方式出现线程安全问题:如果存在多个线程对共享资源竞争,就可能发生线程安全问题。一般解决线程安全问题,需要➕锁1. synchronized同步方法对于非static方法加上synchronized,是对当前对象加锁。而如果对static方法加上synchronized关键字,是对当前类对象-class对象加锁。1. 如果一个线程访问一个对象的synchronized方法,那么...
摘要由CSDN通过智能技术生成

java同步机制的几种方式

出现线程安全问题:

如果存在多个线程对共享资源竞争,就可能发生线程安全问题。

一般解决线程安全问题,需要➕锁

1. synchronized同步方法

对于非static方法加上synchronized,是对当前对象加锁。而如果对static方法加上synchronized关键字,是对当前类对象-class对象加锁。

1. 如果一个线程访问一个对象的synchronized方法,那么其它线程不能访问该对象的synchronized方法。

2. 但是其它线程可以访问这个对象的非synchronized方法。

3. 当然,对于一个类的不同实例之间互不影响。

4. 如果一个线程执行一个对象的非static synchronized方法,另外一个线程执行这个对象所属类的static synchronized方法,不会互斥。因为一个是对象锁,一个是类锁。

5. 对于synchronized同步代码块或者同步方法,当出现异常的时候,虚拟机会自动释放当前线程占用的锁,因此不会出现由于异常导致出现死锁现象。

synchronized原理

对于同步代码块用javap -c com.demo.synchronzeddemo反编译成字节码的时候,会在同步块的入口和出口分看到monitorenter,monitorexit ,这两个指令。

其实对于每个对象都有一个监视器锁,monitor,当monitor被占用的时候就会处于锁定状态,线程执行monitorenter的时候会尝试获取monitor的所有权。

1. 如果monitor的进入数为0,则该线程进入mo

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值