黑马程序员技术交流社区
标题:
同步问题
[打印本页]
作者:
余海龙
时间:
2012-2-9 16:23
标题:
同步问题
本帖最后由 余海龙 于 2012-2-9 22:45 编辑
class Test
{
synchronized static void test1()
{
}
synchronized void text2(){}
}
这个类中的两个方法同步吗?
作者:
杜明辉
时间:
2012-2-9 16:29
这两个方法不同步,因为一个是静态的,另一个不是静态的。他们所使用的锁不相同。
静态同步的用的是该类的所属字节码文件对象表现形式是类名.class锁。
而非静态的用的调用对象的锁,表现形式是this这个锁。
所以不能同步。
作者:
王_涛
时间:
2012-2-9 17:02
不同步。因为锁不同。
1. synchronized static void test1(){} 的锁是Test.class
2. synchronized void text2(){} 的锁是当前对象this
作者:
戚雪晖
时间:
2012-2-9 19:48
本帖最后由 1毫秒的价值 于 2012-2-9 19:50 编辑
相当不同步,因为test1是静态的,这时候如果调用该方法,只能是类调用,但是同步必须有锁,锁在哪里呢,这时候类加载了,因此会有一个描述这个类的对象存在于内存----这就是字节码文件,表现为:Test.class,因此这时候同步用的锁就是Test.class
test2是非静态的,因此是对象调用,这时候谁去调用,这个同步的锁就是谁,所以就是this
而这两个方法的锁就明显不是同一个了,所以这两个方法是不同步的
作者:
李泽霖
时间:
2012-2-9 20:07
锁不是同一把,一个this,一个class,怎么开门啊,各不相干
作者:
刘元霄
时间:
2012-2-9 20:12
不同步。 锁不一样!
作者:
杨扬
时间:
2012-2-9 20:26
静态方法是对类锁定,普通方法是对对象锁定
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2