synchronized可以保障原子性和可见性。因为synchronized无论是同步的方法还是同步的 代码块,都会先把主内存的数据拷贝到工作内存中,同步代码块结束,会把工作内存中的数据 更新到主内存中,这样主内存中的数据一定是最新的。更重要的是禁用了乱序重组以及保证了 值对存储器的写入,这样就可以保证可见性。
Java中每个对象都有一个锁或者称为监视器,当访问某个对象的synchronized方法时,表示 将该对象上锁,而不仅仅是为该方法上锁。
这样如果一个对象的synchronized方法被某个线程执行时,其他线程无法访问该对象的任何 synchronized方法(但是可以调用其他非synchronized的方法)。直至该synchronized方 法执行完。
静态的synchronized方法调用情况:
1、 当调用一个对象的静态synchronized方法时,它锁定的并不是synchronized方法所在的对象,而是synchronized方法所在对象对应的Class对象。这样,其他线程就不能调用该类的其他静结论:执行静态synchronized方法锁方法所在对象,执行非静态
2、 synchronized方法锁方法所在对象对应的Class对象。态synchronized方法了,但是可 以调用非静态的synchronized方法。
3、 synchronized,因为使用起来非常简单所以排在了第一个,并且在jdkl.6以后其性能得 到了极大优化使得其使用更加广泛。

Was this helpful?

0 / 0

发表回复 0

Your email address will not be published.