多线程之加锁问题

个人学习记录,大神勿笑


class Demo {

  sychronized void f(){}

  sychronized void g(){}

}

 

成员为什么要私有化:对于多线程并发而言,成员私有化可以减少肯能并发出现问题的入口,更安全,也比成员加锁更加高效

所有对象都自动含有单一锁,也叫监视器,当对象上任意的方法调用synchronized方法,此对象将会被加锁,并且此对象上所有添加synchronized方法将不能被其他线程执行(普通方法可以被执行),即当f()被一个线程调动还未释放锁时候,其他线程不仅仅不能调用f()方法,而且不能调用g()方法,,即此时对象所得其实是对象内存代码,其实对于某一个特定的对象而言,共享的是同一个锁.

我们只需要也必须要对所有处理临界数据的方法全部加锁,但是调用其他方法将会毫无惩罚性的被正常调用

jvm会统计对象被加锁的次数,只有首个获取对象锁的任务才能再次调用synchronized方法,并且计数会加1,没退出一个snychronized计数会减一.当计数为0就被彻底释放

针对每个类也有一个锁,作为class对象的一部分,所以synchronized static 方法可以在类的范围内保证static数据的并发访问,所以饿汉式的单例模式可以保证线程安全,其实这是有jvm保证的线程安全.

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

岁月玲珑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值