个人学习记录,大神勿笑
class Demo {
sychronized void f(){}
sychronized void g(){}
}
|
成员为什么要私有化:对于多线程并发而言,成员私有化可以减少肯能并发出现问题的入口,更安全,也比成员加锁更加高效
所有对象都自动含有单一锁,也叫监视器,当对象上任意的方法调用synchronized方法,此对象将会被加锁,并且此对象上所有添加synchronized方法将不能被其他线程执行(普通方法可以被执行),即当f()被一个线程调动还未释放锁时候,其他线程不仅仅不能调用f()方法,而且不能调用g()方法,,即此时对象所得其实是对象内存代码,其实对于某一个特定的对象而言,共享的是同一个锁.
我们只需要也必须要对所有处理临界数据的方法全部加锁,但是调用其他方法将会毫无惩罚性的被正常调用
jvm会统计对象被加锁的次数,只有首个获取对象锁的任务才能再次调用synchronized方法,并且计数会加1,没退出一个snychronized计数会减一.当计数为0就被彻底释放
针对每个类也有一个锁,作为class对象的一部分,所以synchronized static 方法可以在类的范围内保证static数据的并发访问,所以饿汉式的单例模式可以保证线程安全,其实这是有jvm保证的线程安全.