黑马程序员技术交流社区
标题:
java synchronized同步静态方法和同步非静态方法的异同
[打印本页]
作者:
axuan
时间:
2014-6-10 14:51
标题:
java synchronized同步静态方法和同步非静态方法的异同
public class Test
{
public void method1()
{
synchronized(this)
{
}
}
public synchronized void method2()
{
}
} java synchronized同步静态方法和同步非静态方法的异同?
作者:
九号球
时间:
2014-6-10 15:10
本帖最后由 九号球 于 2014-6-10 15:12 编辑
首先,你写的这两个代码是
同步函数
和
同步代码块
,两者的同步锁为
this
,如果函数和代码块中内容相同的话,实际使用上并没有区别。
而静态同步方法的写法为:public static synchronized method()
{
}
而静态同步方法的同步锁为该方法所在类的
字节码文件对象
,也就是类名.class。
作者:
心灵的微幸福
时间:
2014-6-10 15:22
不同之处:在使用synchronized块来同步方法时,非静态方法可以通过this来同步(函数需要被对象调用,那么函数的每一个所属对象的引用就是this,所以同步函数使用的锁是this锁),而静态方法必须使用class对象来同步(静态进内存,内存中没有本类对象但是一定有该类对应的字节码文件对象),但是非静态方法也可以通过使用class来同步静态方法。但是静态方法中不能使用this来同步非静态方法。
相同之处:都是处理安全机制的。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2